变量提升的概念
var a = 1; function fn() { if (!a) { var a = 123; } console.log(a); } fn(); // ----------------------- var a; function fn() { if (!a) { var a = 123; } console.log(a); } a = 1; fn();
变量提升是指将声明提升,而逻辑不变
function Foo() { getName = function () { console.log(‘1‘); }; return this; } Foo.getName = function () { console.log(‘2‘); }; Foo.prototype.getName = function () { console.log(‘3‘); }; var getName = function () { console.log(‘4‘); }; function getName() { console.log(‘5‘); } Foo.getName(); getName(); Foo().getName(); getName(); new Foo.getName(); new Foo().getName(); // ----------- // 变量提升转换 function Foo() { getName = function () { console.log(‘1‘); }; return this; } function getName() { console.log(‘5‘); } var getName; Foo.getName = function () { console.log(‘2‘); }; Foo.prototype.getName = function () { console.log(‘3‘); }; getName = function () { console.log(‘4‘); }; // 执行 Foo.getName(); // 2 getName(); // 4 Foo().getName(); // 1 getName(); // 1 new Foo.getName(); // 2 new Foo().getName(); // 3
原文:https://www.cnblogs.com/tllw/p/12803806.html