变量 和函数声明提前问题

经验总结:

  1、变量的声明被提前到作用域顶部,赋值保留在原地;

  2、函数声明整个被提前;

  3、函数作为值整个赋给变量时,只有变量“被提前”了,函数没有“被提前”。

 

作为最佳实践:

  变量声明一定放在作用域/函数最顶部(JavaScript只有函数作用域)。

 

举例:

// 变量声明被提前到作用域顶部,赋值保留在原地。
var a = 'out';
(function inside(){
     alert('before: ' + a);      //undefined
     var a = 'in';
     alert('after: ' + a);      //'in'
}())
alert('out: ' + a);  // 'out'

//相当于
var a = 'out';
(function inside(){
     var a;   //声明提前
     alert('before: ' + a);      //a未被初始化,故为undefined
     a = 'in';
     alert('after: ' + a);      //a被赋值,为'in'
}())
alert('out: ' + a);
// 函数声明整个被提前
// 函数声明格式:function fun(){...}
fun();  //'Hello,world.'
function fun(){ alert('Hello,world.'); }
fun();  //'Hello,world.'

//函数作为值整个赋给变量时,只是变量被提前,函数未被提前
fun();   //TypeError错误,指出fun不是一个函数
var fun = function(){ alert('Hello,world.'); };
fun();  //'Hello,world.'
相当于:
var fun;
fun();   //fun还未被初始化,所以它不是一个函数
fun = function(){ alert('Hello,world.'); };
fun();  //'Hello,world.'

这个知识点具体细节大概就这么多,认真思考体会。

参考:

知乎话题

博客1

一些官方说明文档

转载于:https://www.cnblogs.com/eiyc/p/5749533.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值