猜猜看
function a () {
console.log('函数声明')
}
var a = function () {
console.log('函数表达式')
}
a()
这个输出啥?
var a = function () {
console.log('函数表达式')
}
function a () {
console.log('函数声明')
}
a()
这个又输出啥?
var a;
function a () {
console.log('函数声明')
}
a = function () {
console.log('函数表达式')
}
a()
这个呢?
分析
在分析前,先给出结论:
红宝书说,函数声明是在最开始就声明并生成函数定义,而函数表达式的函数声明是在执行到那一行时才定义的。这么说来,如果同时有个同名的函数声明和函数表达式,不论二者谁在前,最终都会被函数表达式生成的函数定义而覆盖。
下面来看上面几个例子:
声明和执行顺序是:首先函数a声明并定义了函数,然后又声明了变量a。接着开始执行代码,等到执行到给函数变量a赋值时,又重新定义了函数。所以最终,函数表达式的定义把声明函数的函数定义覆盖了。
这个相对于第一个,变量a的声明写在了最前面,但是,依然是先声明和定义函数声明的函数,顺序不变。
这个把函数表达式的声明和定义都写在了最开始,但是,仍然不影响执行顺序。
我们通过变量类型看:
函数声明后,就算是再声明一个相同名字的变量,也不会影响到函数声明的类型。
但是如果变量声明赋值了,之前的函数定义就会被覆盖,类型就变化了。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!