标签:function bar 函数 高级 提升 foo 声明
变量和函数声明都会在任何代码被执行前首先被处理。
变量和函数声明从它们在代码中出现的位置被‘移动’到了最上面,这个过程叫作提升。(js解释器在执行js代码之前,会有个编译过程,编译器会把声明部分提升到当前作用域的最上方,这个过程叫作提升)
1.提升注意事项
- 只有声明会提升,赋值和其他运行逻辑留在原地
- 每个作用域都会进行提升操作
- 函数声明会被提升,但函数表达式不会被提升
- 即使是具名的函数表达式,名称标识符在赋值之前也无法在所在作用域使用
foo() //TypeError
bar() //ReferenceError
var foo = function bar(){
//......
}
上述代码提升后可理解成如下:
var foo;
foo();
bar();
foo = function(){
bar bar = ...self...
//...
}
- 函数优先于变量(当由多个重复声明的代码)
foo();
var foo;
function foo(){
console.log(1);
}
foo = function(){
console.log(2);
}
//输出1
提升后
-----------
function foo(){
console.log(1);
}
foo();
foo = function(){
console.log(2)
}
//var foo由于是重复的声明,因此被忽略了。但是出现在后面的函数声明还是可以覆盖前面的。
重复声明会导致各种问题,因此要避免这种情况。
标签:function,bar,函数,高级,提升,foo,声明 来源: https://www.cnblogs.com/tingshu/p/15221115.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。