Javascript 匿名函数的执行顺序
打印9,8 为什么不是8点,9点Javascript 匿名函数的执行顺序,javascript,anonymous-function,Javascript,Anonymous Function,打印9,8 为什么不是8点,9点 为什么不先执行匿名函数?请查看执行顺序的数字 基本上你有4个部分 具有提升功能的功能声明 调用函数的生命 f的新赋值 新函数的最后一次调用 (函数(){ f();//调用提升函数2 f=function(){//将新函数分配给f 3 控制台日志(8); } })() 函数f(){//已提升函数1 控制台日志(9) } f();//调用新函数4请查看执行顺序的编号 基本上你有4个部分 具有提升功能的功能声明 调用函数的生命 f的新赋值 新函数的最后一次调用 (
为什么不先执行匿名函数?请查看执行顺序的数字 基本上你有4个部分
f
的新赋值(函数(){
f();//调用提升函数2
f=function(){//将新函数分配给f 3
控制台日志(8);
}
})()
函数f(){//已提升函数1
控制台日志(9)
}
f();//调用新函数4
请查看执行顺序的编号
基本上你有4个部分
f
的新赋值(函数(){
f();//调用提升函数2
f=function(){//将新函数分配给f 3
控制台日志(8);
}
})()
函数f(){//已提升函数1
控制台日志(9)
}
f();//调用新函数4
,因为您在调用它之后定义了f()
。因此,它不会调用IIFE中定义的
f()
函数,而是调用outter f():
通过颠倒顺序:
(function() {
f();
f = function() {
console.log(8);
}
})()
function f() {
console.log(9)
}
f();
您可以将8和8作为输出,因为在这两种情况下,它都会调用重写的
f()
函数。因为您在调用它之后定义了f()
。因此,它不会调用IIFE中定义的
f()
函数,而是调用outter f():
通过颠倒顺序:
(function() {
f();
f = function() {
console.log(8);
}
})()
function f() {
console.log(9)
}
f();
您可以将8和8作为输出,因为在这两种情况下,它都会调用重写的
f()
函数。如果需要输出,您可以这样修改它
(function () {
f = function () {
console.log(8);
}
f();
})()
但让我解释一下为什么它是这样执行的
(function() {
f();
function f() {
console.log(8);
}
})()
function f() {
console.log(9)
}
f();
这是有区别的。行'b'
是一个函数表达式。它只有在到达时才被定义。因此当它到达'a'
时,我实际上并不知道“b”函数。相反,c
是一个函数声明,当它遇到“f()”时,它立即知道。
在执行'a'
之后(执行'c'
),它将被'b'
修改为新的定义
为了更清楚地考虑这个函数
(function() {
f(); // Line Number -a
f = function() { //b
console.log(8);
}
})()
function f() { //c
console.log(9)
}
f() //d
您将得到的输出是它已定义。因为在该行a=10
未执行之前,它没有值
Philip Roberts编写的这段小代码实际上显示了代码的执行方式。请看一看如果需要输出,您可以这样修改它
(function () {
f = function () {
console.log(8);
}
f();
})()
但让我解释一下为什么它是这样执行的
(function() {
f();
function f() {
console.log(8);
}
})()
function f() {
console.log(9)
}
f();
这是有区别的。行'b'
是一个函数表达式。它只有在到达时才被定义。因此当它到达'a'
时,我实际上并不知道“b”函数。相反,c
是一个函数声明,当它遇到“f()”时,它立即知道。
在执行'a'
之后(执行'c'
),它将被'b'
修改为新的定义
为了更清楚地考虑这个函数
(function() {
f(); // Line Number -a
f = function() { //b
console.log(8);
}
})()
function f() { //c
console.log(9)
}
f() //d
您将得到的输出是它已定义。因为在该行a=10
未执行之前,它没有值
这是Philip Roberts编写的一段小代码,它实际上显示了您的代码是如何执行的。请看一看谢谢,我现在就知道了:)谢谢,我现在就知道了:)