返回介绍

变量提升

发布于 2024-08-09 21:34:50 字数 4632 浏览 0 评论 0 收藏 0

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);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文