2021-05-22

js复习

一、函数的两种声明方式:

1、 利用函数关键字自定义函数。function  fn (    ){    }  fn(   );

2、函数表达式  var 变量名  = function ( ){   }   变量名();

二、作用域

1、 全局作用域。整个script标签,或是一个单独的js文件。

       1.1、  全局变量。a:  在全局作用域下的变量。  b:  如果在函数内部,没有声明直接赋值的变量。

2、 局部作用域。在函数内部就是局部作用域,这个代码的名字只在函数内部起作用。

      2.1、 局部变量。函数的形参也可以看作是局部变量。

3、作用域链。内部函数访问外部函数的变量,采用的是链式查找的方式来决定取哪个值,这种结构称为作用域链(一层一层向上查找,就近原则)

三、js预解析

js代码是由浏览器中的js解析器来执行的,js解析器在运行js代码的时候分两步执行:

      1、预解析。js解析器会把所有的var和function提升到当前作用域的最前面。(变量提升和函数提升)

             1.1、变量提升。就是把所有的变量声明提升到当前的作用域最前面,不提升赋值操作。

             1.2、函数提升。就是把所有的函数声明提升到当前作用域的最前面,不调用函数。

      2、代码执行。按照代码书写的顺序从上往下执行。

案例:

f1();
console.log(c);
console.log(b);
console.log(a);
function f1(){
    var a = b = c = 6 ;
    console.log(a);
    console.log(b);
    console.log(c);
}



根据js预解析,会将变量和函数做提升。执行过程如下
function f1(){
 //   var a = b = c = 6 ;  // 相当于var a = 6;   b = 6; c = 6;只有a定义了变量,而b和c没有定义变量
    var a;
    a = b = c = 6;
    console.log(a);    // 结果是6   根据作用域链(就近原则)
    console.log(b);    // 结果是6   根据作用域链(就近原则
    console.log(c);    // 结果是6   根据作用域链(就近原则
}
f1();
console.log(c);      // 结果是6   因为 虽然b和c写在了函数里面,但他们是全局变量,所以可以用
console.log(b);      // 结果是6
console.log(a);      // 报错,a is not defined。

 注意:若变量有声明,没有赋值,结果是undefuned.      若变量无声明,无赋值,结果会报错,变量  is  not defined.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值