【var functionName=function(){}和functionName=function(){}有什么区别()】var functionName=function(){}和functionName=function(){}有什么区别?最近发现项目中的JS代码很多地方都使用这两种方式声明方式,不知道这两者有什么区别?使用这两种方式的原因是什么?方法的优缺点是什么?是否有一种方法用而另一种方法做不到的?例如如下代码:
var fn1 = function(){
// 函数体代码
}
function fn2(){
// 函数体代码
}
它们不同的地方在于,fn1是一个函数表达式,和什么普通变量一样,在创建全局执行上下文的时候赋值为undefined,只有全局执行上下文入栈执行的时候才会真正赋值。而fn2是一个函数声明,它在创建全局执行上下文的时候就会初始化并被复制为函数的引用,例如下面的例子:
fn1();
// 创建执行上下文的时候该函数变量值为undefined,所以报错
var fn1 = function(){
console.log("fn1");
} fn2();
// 因为已经在全局执行上下文中创建,所以正常执行
function fn2(){
console.log("fn2");
}
另外,你不能有条件地定义一个函数,在if语句块中,无论如何在里面定义的函数都会被创建,如下例子:
if(false){
function fn3(){
console.log("fn3");
}
}
if("fn3" in window){
console.log("fn3");
// 输出: fn3,说明函数已在全局执行上下文中初始化
}
console.log(fn3);
// undefined
fn3();
// 抛出异常:Uncaught TypeError: fn3 is not a function
推荐阅读
- 在JavaScript中使用哪个等号(== vs ===)进行比较操作好()
- JavaScript正则表达式高级语法原理分析和应用实例
- 不理解JS的模块化,JavaScript的模块化是如何演变或发展来的(如何实现?)
- JavaScript有异常和错误处理吗(如何进行异常处理?可以自定义吗?)
- JavaScript中函数调用分别都有哪些方式(对应的使用场景是什么?)
- AngularJS | angular.isString()函数用法介绍
- Python中的numpy.square()用法详细介绍
- 算法设计(过马路所需的最低初始能量)
- 了解C语言中的volatile限定符第2组(示例)