js变量声明提升&undefined

  变量和函数的定义提升你可能都知道,但在实际碰到的时候可能会忽视。下面看一个例子:

var getName = function(){return 2};//函数表达式

function getName(){return 4};//函数声明

console.log(getName());//2

  再看另一个例子

console.log(getName());//4

var getName = function(){return 2};//函数表达式

function getName(){return 4};//函数声明

  原因:我们知道变量的声明会得到提升,就是说即使我们在代码的最后一行定义了一个变量,也像在代码顶部声明过一样,即使在我们定义前访问它,也不会报错。例:

console.log(a);//undefined

var a = 1;

  这里没有报错,而是显示undefined。我们要弄清楚,只是声明得到了提升。声明和定义的差别,声明是这样:var a,即我们声明了a,但没有给他赋值。定义是这样:var a = 1,我们给他具体的值。

  再回头看前两个例子,用函数声明的方式定义的函数,声明(命名)和定义都会得到提升。而用函数表达式的方法定义的函数,只有声明会得到提升。所以第一个就例子相当于:

var getName;//函数表达式的提升

function getName(){return 4}; //以函数声明方式命名的函数获得的提升

var getName = function(){return 2};

console.log(getName());//2

而第二个例子就相当于:

var getName;

function getName(){return 4}; 

console.log(getName());//4

var getName = function(){return 2};

还有一点关于undefined的内容

jquery的最外面一层是这样

(function( window, undefined ) {

    // jquery code

})(window);

把window传入是为了减少一层向外的搜索,传入undefined是因为个别浏览器,如ie8。允许我们手动改变undefined的值,这样,如果有人改变了它,当我们需要用这样的判断时:xxx==undefined,就会出现问题。之前没考虑过,直到昨天面试的时候,面试官问我,为什么不把undefined一起和window传入,当时我就懵逼了。

回来后想了想,做了个小测试,验证了一下自己的想法。函数的参数列表中的参数会自动在函数开头完成声明,比如这里,我们的参数列表中有undefined,那么如果我们不给这个位置传值,那么对于可以给undefined赋值的浏览器,他就相当于一个声明之后未赋值的变量,那么他的值就是undefined。

若果我们把它和window一起传进去,反倒可能把外部的undefined的值传进去。

还有一点,即使我们更改了undefined的值,当我们测试一个没赋值的变量时,仍会得到undefined。例:

//对于支持更改undefined值的浏览器

undefiend = 8;

console.log(undefined);//8

var a;

console.log(a);//undefined




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值