你不知道的JavaScript之作用域闭包学习心得(三)

1 只有声明本身会被提升,而赋值或其他运行逻辑会留在原地。

2 每个作用域都会进行提升操作,名称标识符赋值之前也无法在所在作用域中使用

foo(); //TypeError
bar(); //ReferenceError
var foo=function bar(){...}

3 函数会首先被提升,然后才是变量。重复的声明会被忽略。但后面出现的函数声明是可以覆盖前面的。

foo(); //1
var foo;
function foo(){
  console.log(1);
};
foo=function(){
  console.log(2);
}

4 一个普通块内部的函数声明通常会被提升到所在作用域的顶部。

foo(); //"c"  foo被声明两次  后面的声明覆盖前面的声明
var a=true;
if(a){
  function foo(){console.log("b");};
}else{
  function foo(){console.log("c");};
};

此行为不可靠,新版浏览器报错,因此应该避免在块内部声明函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值