javascript变量提高和函数提高


变量提高

Variable hoisting变量提高是js比较有特色的地方,它容许你先使用变量,在其后面再进行变量声明,不会抛出 Uncaught ReferenceError异常。虽然变量被提高到前面,可是它的默认值则是undefind,在引用的时候也使用这个值,知道在其面后进行赋值,在使用时候即为所赎的值。javascript

举个例子:java

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");
};
相关文章
相关标签/搜索