欢迎加入QQ讨论群258996829
麦子学院 头像
苹果6袋
6
麦子学院

Javascript中如何提升变量与函数?

发布时间:2017-07-30 23:28  回复:0  查看:2041   最后回复:2017-07-30 23:28  
本文和大家分享的主要是javascript 变量与函数提升相关内容,一起来看看吧,希望对大家 学习javascript有所帮助。
   .提升
   1.js代码的执行分为两个步骤
  a. 预解析
  提升(hoisting
  JavaScript 代码在预解析阶段,会对以 var 声明的变量名,和 function 开头的语句块,进行提升操作
  b. 执行
   func();
  function  func(){
  alert("Funciton has been called");
  }
   2.如何提升
  a. 变量的提升
  alert( a);
  var a = 1;
  提升之后的代码模拟
  var a;
  alert( a);
  a = 1;
  b.  函数同名,如何提升
  预处理的时候,会将两个函数全部提升,但是后面的函数会覆盖掉前面函数
  func1();  //last
   function  func1(){
  console.log('This is first func1');
  }
  func1();  //last
   function  func1(){
  console.log('This is last func1');
  }
  // 预解析提升后的代码
   function  func1(){
  console.log('This is first func1');
  }
   function  func1(){
  console.log('This is last func1');
  }
  func1();  //last
  func1();  //last
  c. 变量和函数同名
  在提升的时候,如果有变量和函数同名,会忽略掉变量,只提升函数
  alert(foo); //undefined   函数体
   function  foo(){}
   var foo = 2;
  alert(foo); //2
  // 预解析 提升后的代码
   function  foo(){};
  alert(foo);
  foo=2;
  alert(foo);
   3.变量提升是分作用域的
   var num = 456;
  function test(){
  console.log(num);
   var num = 10;
  }
  test();// 提升代码之后
   var num;
  num = 456;
  function test(){
   var num;  // 定义未赋值
  console.log(num);
  num = 10;
  }
  test();      // undefined
   var num = 456;
   function  f1() {
  console.log(num);
  num = 10;
  }
  f1();
  console.log(num);
  // 提升之后的代码
   var num;
   function  f1(){
  console.log(num);
  num = 10;
  }
  num = 456;
  f1();        //456
  console.log(num);   //10    当调用 f1 ()时,定义了一个新的全局变量, num=10
   4.函数表达式与函数声明提升
  a. 函数声明全部被提前 ;
  b. 函数表达式(变量声明)仅将变量提前,赋值操作没有被提前 ;
  foo();         //   函数声明
  foo_later();     //  foo_later is not a function
   function  foo(){ console.log(' 函数声明 '); } var foo_later =  function(){ console.log(' 函数表达式 '); }
  提升之后的代码
   function  foo(){ console.log(' 函数声明 '); }    //  函数声明全部被提前 var foo_later;     //  函数表达式(变量声明)仅将变量提前,赋值操作没有被提前
  foo();
  foo_later();
  foo_later =  function(){ console.log(' 函数表达式 '); }
   5.变量搜索原则
  a. 在使用变量的时候
  首先在所在的作用域中查找;
  如果找到了  就直接使用;
  如果没有找到  就去上级作用域中查找。
  b. 重复以上步骤
  如果直到0 级作用域链也就是全局作用域还没有找到,报错。
   var num = 456;
   function  f() {
  num = 678;
   function  foo() {
   var num = 999;
  console.log(num); // 999
  }
  foo();
  console.log(num); //
  }
  f();
  提升之后的代码
   var num;
   function  f(){
   function  foo() {
   var num;
  num = 999;
  console.log(num); // 999
  }
  num = 678;
  foo();
  console.log(num); //678
  }
  num = 456;
  f();
来源:简书
您还未登录,请先登录

热门帖子

最新帖子