天天看点

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

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

  最后转变为

    var value;      //  undefined

    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 来得到