前端面试题(变量提示,闭包/作用域)

1.变量提升

  1.函数提升,先把函数提到最前面,然后是变量提升

 

  var  value = 1;

  var  test  =  function(){

    console.log(value)

    var value =  2;

  }

  function test(){

    console.log(value+1)

  }

  test();         //  undefined

 

  首先是test()函数会被提升到最先,

  然后执行value=1赋值,test = function(){}赋值

  var  test = function(){} 里面的value 提升,先执行 var value ;然后执行console.log(value),所以输出 undefined

  最后转变为

 

  function test(){

    console.log(value+1)

  }

  var  value = 1;

  var  test  =  function(){

    var value;      //  undefined

    console.log(value)

    value =  2;

  }

  test();      

 

2.闭包/作用域

 

  function foo(y){

   var  num = 3;
return function (x){
console.log(x+y+(++num));
}
}
var bar = foo(5)
bar(20) //29
bar(21)   //31



解析为:
在foo这函数的作用域下
var num = 3
var bar = function(x){
  console.log(x+y+(++num))
}
bar(20) num=++num=4 x = 20 y=5 //29
bar(21) num=++num=5 x = 21 y=5 //31


闭包:可以让外部访问局部变量的函数

(function(w){
  var a = 50;
  w.test = a
})(window)
console.log(window.test);

闭包(function(w){var a = 50;w.test = a})里面的变量只能通过 window 来得到

  
  
posted @ 2017-03-07 16:05  小结巴巴吧  阅读(657)  评论(0编辑  收藏  举报