函数表达式本身不能将Name分配给另一个值

问题描述

| 在下面的代码中:
(function (){
    function test(){};//\"function\"
    var test;//\"undefined\"
    var printTest = typeof test;
    document.write(printTest);
})();
printTest将显示\“ function \”而不是\“ undefined \”,这是有道理的,因为根据我的理解,任何变量声明都始终被“悬挂”在执行上下文的顶部(在这种情况下为函数执行上下文) )这使函数声明\“ test()\”成为稍后在当前执行上下文中出现的声明。现在考虑这段代码在这里我实际上为var声明\“ var test = 1 \”赋了一个值。
(function (){
        function test(){};
        var test=1;//assign value to a variable here
        var printTest = typeof test;
        document.write(printTest);
    })();
然后printTest现在显示\“ number \”,这意味着执行上下文现在保持不同的顺序。有人可以解释一下这里实际发生了什么吗?     

解决方法

        吊装将实际分配与变量声明分开。它真正在做什么是这样的:
(function (){
        var test,printTest;
        test = function (){};
        test = 1;//assign value to a variable here
        printTest = typeof test;
        document.write(printTest);
    })();
    ,        “ 3”仅表示“任何测试都应在本地范围内”。它之所以未定义,仅是因为您没有为它分配值(除非您使用
function test(){};
,这就是为什么您得到
function
而不是
undefined
)的原因。 在第二个示例中,
function test(){};
仍为其分配一个功能,但
var test=1;
用with9ѭ覆盖该功能。给the9赋值后再使用use10ѭ,它会报告它是一个数字。