美文网首页
JS全局变量与局部变量的经典例子

JS全局变量与局部变量的经典例子

作者: 伊凡的一天 | 来源:发表于2018-05-12 19:41 被阅读84次

我们先看下面一个例子:

 var a = 10;
function test(){
    a = 100;
    console.log(a);
    console.log(this.a);
    var a;
    console.log(a);
}
test();

输出结果为:100, 10, 100
分析:

  • 首先函数执行前进行扫描,得到函数中存在一个局部变量a,将a添加到函数的活动变量对象中,从而在作用域链中能够找到该局部变量a。此时a的值为undefined。
  • 执行赋值语句a = 100;后,更新活动对象中a的值为100
  • 执行console.log(a);读取当前执行环境中的作用域链,首先读取作用域链前端即test()函数的活动对象,读取到局部变量a的定义,即100。因此第一个输出为100。
  • 执行console.log(this.a);语句,由于在全局环境中调用test()函数,因此这儿的this指向window,等价于执行console.log(window.a);。因此第二个输出为10。
  • 执行var a;语句。JS中再次定义一个同名变量(不初始化),会忽略第二次的定义。因此此语句无效。
  • 最后执行console.log(this.a);语句,依旧是访问全局变量a,因此输出100。

再看下面一个例子:

var a = 100;
function test(){
    console.log(a);
    var a = 10;
    console.log(a);
}
test();

输出结果为:undefined, 10
分析:

  • 首先函数执行前进行扫描,得到函数中存在一个局部变量a,将a添加到函数的活动变量对象中,从而在作用域链中能够找到该局部变量a。此时a的值为undefined。
  • 执行console.log(a);,读取当前执行环境中的作用域链,首先读取作用域链前端即test()函数的活动对象,读取到局部变量a的定义,值为undefined,因此第一个输出为undefined。
  • 执行var a = 10;,先读取作用域链前端即test()函数的活动对象,读取到局部变量a的定义,更新值为10。
  • 执行console.log(a);,读取当前执行环境中的作用域链,首先读取作用域链前端即test()函数的活动对象,读取到局部变量a的定义,值为10,因此第二个输出为10。

相关文章

  • JS全局变量与局部变量的经典例子

    我们先看下面一个例子: 输出结果为:100, 10, 100分析: 首先函数执行前进行扫描,得到函数中存在一个局部...

  • js中的作用域链

    1、JavaScript的全局变量和局部变量 首先,先来看看js的全局变量和局部变量,js不是块级作用域,所以不能...

  • js 闭包理解

    了解js中的全局变量和局部变量 全局变量属于 window 对象,局部变量只能用于定义它函数内部。当全局和局部变量...

  • C/C++知识点分享(16)

    1、statac全局变量、局部变量、函数与普通全局变量、局部变量、函数,static全局变量与普通的全局变量有什么...

  • python 常见错误点

    一、局部变量与全局变量 的 最困难误区 例子一: 结果会出现下面的错误:UnboundLocalError: ...

  • JS作用域链

    JS的变量的作用域可分为全局变量和局部变量在JS函数内部可以直接读取全局变量,在函数内的局部变量外部是无法读取的,...

  • es6新特性-局部变量let

    局部变量 let 以前在js中, 所有的变量都是全局变量, 经常会出现变量同名, 导致局部变量覆盖全局变量的值, ...

  • js 变量作用域和函数作用域

    js变量作用域可分为:“全局变量”和“局部变量” “全局变量”:申明在函数之外的变量 “局部变量”:申明在函数体中...

  • JS作用域链

    1、JavaScript的全局变量和局部变量 (1) 全局变量 js的全局变量也可以看做window对象的属性。如...

  • 2018-11-12

    全局变量和局部变量 JS函数内部可以直接读取全局变量 但函数外部无法读取函数内部的局部变量 从外部读取函数内部的 ...

网友评论

      本文标题:JS全局变量与局部变量的经典例子

      本文链接:https://www.haomeiwen.com/subject/pcphdftx.html