【问题标题】:Scope of variables in functions using javascript使用javascript的函数中的变量范围
【发布时间】:2014-02-03 09:18:15
【问题描述】:
  1. 为什么 y 会泄漏到函数之外,因为 JavaScript 中的作用域绑定到函数。
  2. 详细的解释会很有成效。

    var x = 0;
    function f(){
       var x = y = 1; // x is declared locally. y is not!
        };
    f();
    console.log(x, y); // 0, 1
    

【问题讨论】:

  • 有什么要解释的。 X 不在全局范围内(至少是您在函数中使用的范围)。 Y IS 在全局范围内。

标签: javascript scope


【解决方案1】:

这只是语法错误。 var x = y = 1;这一行的意思是:

  1. 声明局部变量x,
  2. y = 1,
  3. 声明全局变量 y(因为它没有声明)
  4. x = y;

替换

var x = y = 1;

var x = 1, y = 1;

var x = 1;
var y = 1;

你会得到局部变量 y

http://www.w3schools.com/js/js_variables.asp

【讨论】:

  • 换句话说,您可以声明变量 (var x,y;) 然后使用它们,或者使用逗号进行赋值声明 (var x=1, y=1;),但行 var x = y = 1;解释器理解为 4 个动作,1)局部变量 x 2)创建全局变量 y(因为它没有被声明)3)x=y 4)y=1
  • var x = y = 1;等于代码 - var x; y = 1; x = y;
  • 您应该编辑您的第一条评论,因为它是错误的(语句评估的顺序),而不是第二条评论(它是正确的)。现在的方式(两个不同的 cmets,第一个有问题)可能会令人困惑......
【解决方案2】:

y 变量是全局变量的原因是,在 Javascript 中,如果您在赋值语句中省略 var 关键字,则赋值给的变量将在全局对象上声明。

这意味着如果你用这种方式编写 f() 函数,用 var 关键字声明 x 和 y:

function f(){
    var x, y;
    x = y = 1;
};

那么 x 和 y 都将是局部变量(局部 x 会影响全局变量)。

不声明变量就赋值是不好的做法(使用 var 关键字)。 新版本的 JS 会对此抛出错误。您可以使用 EC5 的严格模式来利用此行为: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode

所以你会这样写你的函数:

 function f(){
        'use strict'
        var x, y;
        x = y = 1;
    };

现在,如果你忘记声明 y,你会得到一个错误,要求你这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    相关资源
    最近更新 更多