var salary = "1000$";
(function () {
console.log("Original salary was " + salary); //1000$
salary = "5000$";
console.log("My New Salary " + salary); //5000$
})();
(function () {
console.log("Original salary was " + salary); //undefined ??
var salary = "5000$";
console.log("My New Salary " + salary); //5000$
})();
为什么以及第一个和第三个控制台日志如何显示不同的输出?
这是由于可变托管所致。在您的第二个IIFE函数中,您已经声明了工资变量,它实际上移至功能的顶部,并且掩盖了您的全局薪金函数
JavaScript汇总此代码,例如。查看代码。
var salary = "1000$";
(function () {
console.log("Original salary was " + salary); //1000$
salary = "5000$";
console.log("My New Salary " + salary); //5000$
})();
(function () {
var salary ;
console.log("Original salary was " + salary); //undefined ??
// get move to opvar salary = "5000$";
salary = "5000$";
console.log("My New Salary " + salary); //5000$
})();
顶线创建一个称为薪金的全局变量。在第二个功能的范围内,有一个局部变量称为薪金。这意味着在第二个函数中,您无法以这种方式访问全局变量,并且尚未设置本地变量,因此它实际上是未定义的,直到设置该线路的行。