Javascript;通过赋值给变量创建的函数?
想得到一些关于这方面的信息。在编写Javascript时,我习惯于创建如下函数:Javascript;通过赋值给变量创建的函数?,javascript,anonymous-function,Javascript,Anonymous Function,想得到一些关于这方面的信息。在编写Javascript时,我习惯于创建如下函数: function firstThing() { console.log("first"); }; 我在学习教程,看到了这个设置。使用变量赋值,然后传递匿名函数,然后。。。成为函数名。有没有理由用这种方式来代替上面的“传统”方式 var secondThing = function() { console.log("second"); }; 称呼他们是一样的: firstThing() secon
function firstThing() {
console.log("first");
};
我在学习教程,看到了这个设置。使用变量赋值,然后传递匿名函数,然后。。。成为函数名。有没有理由用这种方式来代替上面的“传统”方式
var secondThing = function() {
console.log("second");
};
称呼他们是一样的:
firstThing()
secondThing()
还有一个区别。第一个选项创建命名函数,第二个选项将创建匿名函数 查看堆栈跟踪时,第二个选项将显示为匿名函数,第一个选项将显示为命名。您可以看到第一种方法如何在调试时提供一些见解
一些进一步的参考文献和。还有另一个区别。第一个选项创建命名函数,第二个选项将创建匿名函数 查看堆栈跟踪时,第二个选项将显示为匿名函数,第一个选项将显示为命名。您可以看到第一种方法如何在调试时提供一些见解
一些进一步的参考和。这称为函数表达式:
var foo = function() {}
这是一个函数声明:
function foo() {}
一个主要的区别是函数声明被“挂起”。在幕后,函数声明被“提升”到其作用域的顶部并分配给变量名——实际上与函数表达式相同
考虑这一点:
foo(); //logs 'abc'
function() {
console.log('abc');
}
这很好,因为foo
将被提升。对于函数表达式,此操作将失败:
foo(); //foo is not defined!
var foo = function() {
console.log('abc');
}
函数表达式最棒的一点是,您可以使用IIFE(立即调用的函数表达式)分配它们的值,并具有如下私有值和函数:
var myFunc = (function() {
function thisWillBeMyFunc() {
doOne();
doTwo();
doThree();
}
function doOne() {
console.log('Action 1!');
}
function doTwo() {
console.log('Action 2!');
}
function doThree() {
console.log('Action 3!');
}
return thisWillBeMyFunc;
}());
myFunc(); //logs the actions
doOne(); //error - not defined!
哦,JavaScript的强大功能和灵活性 这称为函数表达式:
var foo = function() {}
这是一个函数声明:
function foo() {}
一个主要的区别是函数声明被“挂起”。在幕后,函数声明被“提升”到其作用域的顶部并分配给变量名——实际上与函数表达式相同
考虑这一点:
foo(); //logs 'abc'
function() {
console.log('abc');
}
这很好,因为foo
将被提升。对于函数表达式,此操作将失败:
foo(); //foo is not defined!
var foo = function() {
console.log('abc');
}
函数表达式最棒的一点是,您可以使用IIFE(立即调用的函数表达式)分配它们的值,并具有如下私有值和函数:
var myFunc = (function() {
function thisWillBeMyFunc() {
doOne();
doTwo();
doThree();
}
function doOne() {
console.log('Action 1!');
}
function doTwo() {
console.log('Action 2!');
}
function doThree() {
console.log('Action 3!');
}
return thisWillBeMyFunc;
}());
myFunc(); //logs the actions
doOne(); //error - not defined!
哦,JavaScript的强大功能和灵活性 我记得有一天我读了一篇精彩的文章,但此刻我找不到比这更好的了——事实上,它说我错了。看来我把什么搞糊涂了。这很奇怪,因为我读的那篇文章我找不到——这两个步骤之间有很大的区别。所以,是的,似乎是提升,我很久以前就想错了:-我知道这是标记为重复的,但我感谢讨论/示例。只是为了好玩:我记得有一天我读了一篇精彩的文章,但现在我找不到比这更好的了——事实上它说我错了。看来我把什么搞糊涂了。这很奇怪,因为我读的那篇文章我找不到——这两个步骤之间有很大的区别。所以,是的,似乎是提升,我很久以前就想错了:-我知道这是标记为重复的,但我感谢讨论/示例。只是为了好玩:在Javascript中查看堆栈跟踪的首选方法是什么?在Javascript中查看堆栈跟踪的首选方法是什么?