Javascript 将函数赋值给变量和不赋值之间的区别

Javascript 将函数赋值给变量和不赋值之间的区别,javascript,jquery,Javascript,Jquery,我在几个不同的项目上工作过,我看到了创建jQuery/JavaScript函数的两种不同方法 第一: function testFunction(){ }; 第二点: var testFunction = function (){ }; 这两者之间有区别吗 主要区别在于第一个(函数声明)被提升到声明它的作用域的顶部,而第二个(函数表达式)则不是 这就是您能够调用在调用后声明的函数的原因: testFunction(); function testFunction() {} 不能使用函数

我在几个不同的项目上工作过,我看到了创建jQuery/JavaScript函数的两种不同方法

第一:

function testFunction(){

};
第二点:

var testFunction = function (){

};

这两者之间有区别吗

主要区别在于第一个(函数声明)被提升到声明它的作用域的顶部,而第二个(函数表达式)则不是

这就是您能够调用在调用后声明的函数的原因:

testFunction();
function testFunction() {}
不能使用函数表达式执行此操作,因为赋值发生在适当的位置:

testFunction();
var testFunction = function() {}; //TypeError
还有第三种形式(命名函数表达式):

在这种情况下,标识符
myFunc
仅在函数内的作用域中,而
testFunction
在声明它的任何作用域中都可用。但是(当涉及到Internet Explorer时,总是有一个BUT)在IE版本9以下的
myFunc
标识符错误地泄漏到包含范围。命名函数表达式在需要引用调用函数时非常有用(因为已弃用)


还要注意,变量声明也是如此:

console.log(x); //undefined (not TypeError)
var x = 10;
您可以想象JavaScript引擎对代码的解释如下:

var x; //Declaration is hoisted to top of scope, value is `undefined`
console.log(x);
x = 10; //Assignment happens where you expect it to

阅读这个+1知识我不知道它是如何工作的。我遇到了
var testFunction=function(){}
的问题,不知道为什么。这完全有道理。@ŠimeVidas-对。我会加进去的。
var x; //Declaration is hoisted to top of scope, value is `undefined`
console.log(x);
x = 10; //Assignment happens where you expect it to