Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 立即调用的函数表达式运行最后定义的函数。为什么?_Javascript_Iife - Fatal编程技术网

Javascript 立即调用的函数表达式运行最后定义的函数。为什么?

Javascript 立即调用的函数表达式运行最后定义的函数。为什么?,javascript,iife,Javascript,Iife,在使用立即调用的函数表达式时,我遇到了一些意想不到的奇怪行为。下面的代码在末尾有生命时运行函数hello。为什么会这样 var hello = function () { console.log("hello"); } (function () { })(); 运行这个,它不会 var hello = function () { console.log("hello"); }; (function () { })(); 这是因为JavaScript解释器将其理解为连续代

在使用立即调用的函数表达式时,我遇到了一些意想不到的奇怪行为。下面的代码在末尾有生命时运行函数
hello
。为什么会这样

var hello = function () {
    console.log("hello");
}

(function () {

})();
运行这个,它不会

var hello = function () {
    console.log("hello");
};

(function () {
})();
这是因为JavaScript解释器将其理解为连续代码,除非您放置
将其标记为语句的结尾

你的代码

var hello = function () {
    console.log("hello");
}

(function () {
})();
实际上变成了这样

var hello = function () {
               console.log("hello");
            }(function(){})();

解释器将
function(){}
作为参数,立即运行
hello
函数,并为next
()

抛出错误。这并不能回答OP的问题。因为分号。JS解析器将两个函数视为一个函数,如下所示:
var hello=function(){console.log(“hello”);}(function(){})(所以它只运行“hello”函数,因为它在hello和之间看不到分号IIFE@AlexanderT正确,谢谢。。他是不是把这个加进去了description@AlexanderT:FWIW,我知道为什么,但答案应该解释解决方案,而不仅仅是包含代码。您的解释应该是答案的一部分。@FelixKling当然,我添加了一些解释:)