javascript变量提拔和函数提拔

变量提拔

Variable hoisting变量提拔是js比较有特性的处所,它许可你先运用变量,在其背面再举行变量声明,不会抛出 Uncaught ReferenceError非常。虽然变量被提拔到前面,然则它的默认值则是undefind,在援用的时刻也运用这个值,晓得在其面后举行赋值,在运用时刻即为所赎的值。

举个例子:

console.log(x)
//假如背面不定义x 则抛出"ReferenceError: x is not defined
//假如背面临x定义 则打印出undefined
var x = 2


var abc = "abcd";

(function(){
    console.log(abc); //undefined
   var abc = "1234";
  console.log(abc); //"1234"
})()

//上面代码能够如许翻译

var x;
console.log(x)//undefined
var x = 2

var abc = "abcd";

(function(){
  var abc;
  console.log(abc); //undefined
  var abc = "1234";
  console.log(abc); //"1234"
})()

基于这个缘由,在日常平凡编写代码时刻,只管把变量声明放到代码块最顶层位置,能够使代码构造清楚。
注重的是,在ES6语法中新增的let or const 声明体式格局,并不支撑这类变量提拔,强行运用会抛出毛病ReferenceError

函数提拔

关于函数提拔,只用函数的声明被提拔,表达式则不会被提拔

/* 函数声明 */

foo(); // "bar"

function foo() {
  console.log("bar");
}
/* 函数表达式   表达式定义的函数,称为匿名函数。匿名函数没有函数提拔。*/

baz(); // TypeError: baz is not a function
//此时的"baz"相当于一个声明的变量,范例为undefined。
因为baz只是相当于一个变量,因而浏览器以为"baz()"不是一个函数。
var baz = function() {
  console.log("bar2");
};
    原文作者:千年老妖
    原文地址: https://segmentfault.com/a/1190000010158921
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞