详细解释会很有成效。
var x = 0;
function f(){
var x = y = 1; // x is declared locally. y is not!
};
f();
console.log(x, y); // 0, 1
答案 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;
行意味着:
替换
var x = y = 1;
带
var x = 1, y = 1;
或
var x = 1;
var y = 1;
你会得到局部变量y