本文主要是介绍【JavaScript】var a = b = 3;是如何执行的?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
(function(){var a = b = 3;
})();console.log("a defined? " + (typeof a !== 'undefined'));
console.log("b defined? " + (typeof b !== 'undefined'));
由于 a 和 b 都定义在函数的封闭范围内,并且都始于 var关键字,大多数JavaScript开发人员期望 typeof a 和 typeof b 在上面的例子中都是undefined。
然而,事实并非如此。这里的问题是,大多数开发人员将语句 var a = b = 3; 错误地理解为是以下声明的简写:
var b = 3;
var a = b;
但事实上,var a = b = 3; 实际是以下声明的简写:
b = 3;
var a = b;
因此(如果你不使用严格模式的话),该代码段的输出是:
a defined? false
b defined? true
但是, b 如何才能被定义在封闭函数的范围之外呢?是的,既然语句 var a = b = 3; 是语句 b = 3; 和 var a = b;的简写, b 最终成为了一个全局变量(因为它没有前缀 var 关键字),因此仍然在范围内甚至封闭函数之外。
需要注意的是,在严格模式下(即使用 use strict),语句var a = b = 3; 将生成ReferenceError: b is not defined的运行时错误,从而避免任何否则可能会导致的headfakes /bug。 (还是你为什么应该理所当然地在代码中使用 use strict 的最好例子!)
这篇关于【JavaScript】var a = b = 3;是如何执行的?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!