var name = ‘World!’;(function () {var nameif (typeof name === ‘undefined’) {name = ‘Jack’;console.log(‘Goodbye ‘ + name);} else {console.log(‘Hello ‘ + name);}})();求打印结果 :
解析 :
1-首先js代码在执行之前会先进行预解析
2-全局变量name的声明被提升到全局作用域的最前面
3-代码进行执行 给全局的name值赋值为’World!’, 匿名函数自调用
4-匿名函数自调用开始之后 在执行自身内部代码之前又要进行预解析 将局部变量name声明提升到当前作用域的最前面 开始执行js代码
5-只提升了变量声明 没有提升赋值 所以此时局部作用域内的name值是undefined
满足if判断 给name赋值 Jack 打印出 ‘Goodbye Jack’;
var a;if (“a” in window) {var a = 10;}alert(a);求 : 弹出结果解析 :var a;var a;if (“a” in window) {a = 10;}alert(a);解析:1-代码执行之前先进行预解析 提升变量声明 var a;2-执行代码 if判断成立 给a赋值103-打印出10补充一个注意点 判断一个对象是不是有一个什么属性 不能写变量a 如果写了变量a会找到这个变量的值来判断在不在这个对象中
var foo = 1;function bar() {if (!foo) {var foo = 10;}alert(foo);}bar();预解析 :// function bar() {// var foo; //undefined => false// if (!foo) {// foo = 10;// }// alert(foo); //// }// var foo;// foo = 1;// bar();//解析://1-代码执行之前先进行预解析//2- bar里面的代码执行之前也要进行预解析 将foo的声明提前//3- 执行js代码//4- if判断满足 foo被赋值成10//5- 3-打印出10
var num = 123;function f1(num) {console.log(num); //}function f2() {var num = 456;f1(num);}f2();结果 : 456function fn(){var a = 1, b = 1, c = 1;//相当于://var a = 1;//var b = 1;//var c = 1;//所以 abc都是局部变量 全局作用内是访问不到的}fn();console.log(c); ////js是解释型语言,执行一行解释一行,发现报错就停止执行console.log(b); //console.log(a); //结果为 :106 Uncaught ReferenceError: c is not defined
at 03.html:106
function fn1(){var a = b = c = 1;// 相当于:var a = 1;b = 1;c = 1;}fn1();console.log(c); //console.log(b); //console.log(a); //结果为:1
1
Uncaught ReferenceError: a is not defined
var a = 1;function fn(){var a = 2;function fnSon(a){a = 3;console.log(a); // 3}fnSon();console.log(a); // 2}console.log(a); // 1fn();console.log(a); // 1执行结果为 : 1 、3 、2 、1预解析 : 函数声明要提升到变量声明之前function fn(){function fnSon(a){a = 3;console.log(a); // 3}var aa = 2;fnSon();console.log(a); // 2}var aa = 1;console.log(a); // 1fn();console.log(a); // 1
var a = 1;function a(){a++;}console.log(a)结果 : 1
var a ;function a(){console.log(‘呵呵’)function a(){a = 4;console.log(‘哈哈’)}a();console.log(a);}a();console.log(a);结果为 :呵呵
哈哈
4函数
var a = { x : 1 }var b = a;a.x = a = { n : 1};console.log(a.x); //console.log(b.x); //打印结果为 “undefined
{n: 1}
转载请注明:前端Tree » 考察js变量提升面试题