自学JavaScript笔记(DAY05)

本文详细介绍了JavaScript中的函数,包括形参与实参匹配、返回值、break、continue和return的区别,以及arguments对象的使用。此外,还探讨了作用域的概念,包括全局与局部作用域、作用域链,并解释了JS的预解析机制。最后,讲解了创建对象的三种方式及对象的遍历。通过实例展示了如何在实际编程中应用这些概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

01 函数

1.函数形参和实参个数不匹配问题arguments

2.函数的返回值

break ,continue ,return 的区别

3.arguments

4.函数的两种声明方式

02 作用域

1.作用域

2.变量作用域

3.作用域链

03 JS的运行机制----预解析

04 对象

1.创建对象的三种方式:

2.遍历对象

小结


 

01 函数

1.函数形参和实参个数不匹配问题arguments

function sum(num1, num2) {
    console.log(num1 + num2);
}
sum(100, 200);             // 形参和实参个数相等,输出正确结果
sum(100, 400, 500, 700);   // 实参个数多于形参,只取到形参的个数
sum(200);                  // 实参个数少于形参,多的形参定义为undefined,结果为NaN

2.函数的返回值

函数没有 return 返回 undefined

break ,continue ,return 的区别

break :结束当前的循环体(如 for、while)

continue :跳出本次循环,继续执行下次循环(如 for、while)

return :不仅可以退出循环,还能够返回 return 语句中的值,同时还可以结束当前的函数体内的代码

3.arguments

当我们不确定有多少个参数传递的时候,可以用 arguments 来获取。

所有函数都内置了一个 arguments 对象,arguments 对象中存储了传递的所有实参。

arguments展示形式是一个伪数组,因此可以进行遍历。

        伪数组具有以下特点: 具有 length 属性

        按索引方式储存数据

        不具有数组的 push , pop 等方法

4.函数的两种声明方式

1. 自定义函数方式(命名函数)

// 声明定义方式

function fn() {...}

// 调用  

fn();

 2.函数表达式方式(匿名函数)

// 这是函数表达式写法,匿名函数后面跟分号结束

var fn = function(){...};

// 调用的方式,函数调用必须写到函数体下面

fn();

02 作用域

1.作用域

全局作用域、局部作用域(函数作用域)

JS没有块级作用域(在ES6之前)

块作用域由 { } 包括。

在其他编程语言中(如 java、c#等),在 if 语句、循环语句中创建的变量,仅仅只能在本 if 语句、本循环语句中使用。

2.变量作用域

局部变量、全局变量

--在全局作用域下 var 声明的变量 是全局变量

特殊情况下,在函数内不使用 var 声明的变量也是全局变量(不建议使用)

--在函数内部 var 声明的变量是局部变量

函数的形参实际上就是局部变量

--局部变量更省空间

3.作用域链

作用域链:采取就近原则的方式来查找变量最终的值。

03 JS的运行机制----预解析

  1. JS引擎运行js分为两步:预解析 代码执行
  • 预解析:js引擎会把js里面所有的var还有function提升到当前作用域的最前面
  • 代码执行:按照代码书写的顺序从上往下执行

预解析分为 变量预解析(变量提升)和函数预解析(函数提升)

  • 变量提升:就是把所有的变量声明提升到当前作用于的最前面 不提升赋值操作
  • 函数提升:就是把所有的函数声明提升到当前作用域的最前面 不调用函数

04 对象

1.创建对象的三种方式:

  • 利用字面量创建对象
var star = {
    name : 'pink',  //键:值,
    age : 18,
    sex : '男',
    sayHi : function(){
        alert('大家好啊~');
    }
};

对象的调用:

console.log(star.name)     // 调用名字属性
console.log(star['name'])  // 调用名字属性
star.sayHi();              // 调用 sayHi 方法,注意,一定不要忘记带后面的括号
  • 利用 new Object 创建对象
var andy = new Obect();
andy.name = 'pink';
andy.age = 18;
andy.sex = '男';
andy.sayHi = function(){
    alert('大家好啊~');
}
  • 利用构造函数创建对象
function Person(name, age, sex) {
     this.name = name;
     this.age = age;
     this.sex = sex;
     this.sayHi = function() {
      alert('我的名字叫:' + this.name + ',年龄:' + this.age + ',性别:' + this.sex);
    }
}
var bigbai = new Person('大白', 100, '男');
var smallbai = new Person('小白', 21, '男');

注意

1.   构造函数约定首字母大写。

2.   函数内的属性和方法前面需要添加 this ,表示当前对象的属性和方法。

3.   构造函数中不需要 return 返回结果。

4.   当我们创建对象的时候,必须用 new 来调用构造函数。

2.遍历对象

for...in 语句用于对数组或者对象的属性进行循环操作。

for (变量 in 对象名字) {    //通常我们会将这个变量写为 k 或者 key

// 在此执行代码

for (var k in obj) {
    console.log(k);      // 这里的 k 是属性名
    console.log(obj[k]); // 这里的 obj[k] 是属性值
}

小结

1. 对象可以让代码结构更清晰

2. 对象复杂数据类型object。

3. 本质:对象就是一组无序的相关属性和方法的集合。

4. 构造函数泛指某一大类,比如苹果,不管是红色苹果还是绿色苹果,都统称为苹果。

5. 对象实例特指一个事物,比如这个苹果、正在给你们讲课的pink老师等。

6. for...in 语句用于对对象的属性进行循环操作。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值