自我调用函数中没有var关键字的变量如何有效


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$
    })();

顶线创建一个称为薪金的全局变量。在第二个功能的范围内,有一个局部变量称为薪金。这意味着在第二个函数中,您无法以这种方式访问全局变量,并且尚未设置本地变量,因此它实际上是未定义的,直到设置该线路的行。

最新更新