1 Star 0 Fork 98

子不语 / web-interview

forked from shuiruohanyu / web-interview 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
变量提升.md 3.42 KB
一键复制 编辑 原始数据 按行查看 历史
齐丶先丶森 提交于 2019-08-22 15:40 . Update web-interview

返回主页

1.变量提升

// 1
console.log(tt);
tt = "dd";
console.log(tt);
// 变量提升之后的代码:
var tt;
console.log(tt); //undefined
tt = "dd";
console.log(tt); //'dd'
// 2
if (!a) {
  var a = 2;
}
console.log(a);
// 变量提升之后的代码:
var a; //undefined
if (!a) {
  //true
  a = 2;
}
console.log(a); //2

2.函数提升

// 1
if (false) {
  function fn() {
    console.log(1);
  }
}
console.log(fn);
fn();
// 变量提升之后的代码:
var fn; //undefined
if (false) {
  function fn() {
    console.log(1);
  }
}
console.log(fn); //undefined
fn(); // fn is not a function
// 2
function fn() {
  foo();
  return;
  function foo() {}
}
fn();
// 变量提升之后的代码:
function fn() {
  function foo() {}
  foo(); // 没有输出也不会报一个错误,因为foo是一个函数
  return;
}
fn();
// 3
function bar() {
  console.log(foo);
  return;
  var foo = function() {};
}
bar();
// 变量提升之后的代码:
function bar() {
  var foo;
  console.log(foo); // undefined
  return; // 函数return之后的代码依旧会发生变量提升
  foo = function() {};
}
bar();
// 4
console.log(f1);
console.log(f2);
function f1() {}
var f2 = function() {};
// 变量提升之后的代码:
function f1() {} // 函数提升,整个代码块提升到文件的最开始
var f2;
console.log(f1); // function f1() {}
console.log(f2); // undefined
f2 = function() {};

3.函数和变量同时提升

// 1
console.log(fn);
var fn = function() {
  console.log(1);
};
console.log(fn);
function fn() {
  console.log(2);
}
console.log(fn);
// 变量提升之后的代码:
var fn;
function fn() {
  console.log(2);
}
console.log(fn); // 2
fn = function() {
  console.log(1);
};
console.log(fn); // 1
console.log(fn); // 1
// 2
console.log(f1());
console.log(f2);
function f1() {
  console.log("aa");
}
var f2 = function() {};
// 变量提升之后的代码:
var f2
function f1() {
  console.log("aa"); // "aa"
}
f2 = function() {};
console.log(f1()); // undefined
console.log(f2); // ƒ () {}
// 3
(function() {
  console.log(a);
  a = "aaa";
  var a = "bbb";
  console.log(a);
})();
// 变量提升之后的代码:
// 4
console.log(a);
var a = 1;
console.log(a);
function a() {}
console.log(a);
// 变量提升之后的代码: 函数的提升后的位置是在变量提升后的位置之后的
var a;
function a() {}
console.log(a); // a()
a = 1;
console.log(a); // 1
console.log(a); // 1
// 5
console.log(a);
var a = 1;
console.log(a);
function a() {}
console.log(a);
console.log(b);
var b = 2;
console.log(b);
function b() {}
console.log(b);
// 变量提升之后的代码:
var a;
var b;
function a() {}
function b() {}
console.log(a); // a()
a = 1;
console.log(a); // 1
console.log(a); // 1
console.log(b); // b()
b = 2;
console.log(b); // 2
console.log(b); // 2
// 6
console.log(a);
console.log(b); // 报错 隐式全局变量不会提升
b = "aaa";
var a = "bbb";
console.log(a);
console.log(b);
1
https://gitee.com/zi-bu-yu/web-interview.git
git@gitee.com:zi-bu-yu/web-interview.git
zi-bu-yu
web-interview
web-interview
master

搜索帮助