使用javascript的函数中的变量范围

时间:2014-02-03 09:18:15

标签: javascript scope

  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
    

2 个答案:

答案 0 :(得分:0)

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

这意味着如果你用这种方式编写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;
    };

现在,如果您忘记申报,则会收到错误的吼叫。

答案 1 :(得分:0)

这只是语法错误。 第var x = y = 1;行意味着:

  1. 声明局部变量x,
  2. y = 1,
  3. 声明全局变量y(因为它未声明)
  4. x = y;
  5. 替换

    var x = y = 1;
    

    var x = 1, y = 1;
    

    var x = 1;
    var y = 1;
    

    你会得到局部变量y

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