1、请阅读以下代码,写出以下程序的执行结果
var foo = "123";
function print() {
var foo = "456";
this.foo = "789";
console.log(foo);
}
print();
分析
在函数print中,this指向的是window,所以this.foo = "789"改变的是全局变量foo的值,局部变量foo的值并没有改变。所以输出值为456。
运行结果
456
2、请阅读以下代码,写出以下程序的执行结果
function print(){
console.log(foo);
var foo = 2;
console.log(foo);
console.log(hello);
}
print();
分析
函数在执行前会进行预编译,在print函数预编译的过程中,foo首先会被提升层级并赋值,即一开始foo = undefined。所以第一个foo输出的是undefined。接下来给执行foo = 2,故第二次输出结果是2。由于hello并没有被定义,所以第三次输出的结果将会报错,hello is not defined。
运行结果
undefined
2
hello is not defined
3、请阅读以下代码,写出以下程序的执行结果
function print(){
var test;
test();
function test(){
console.log(1);
}
}
print();
分析
此题思路比较清晰,print函数在执行的过程中,将会执行test函数,输出结果是1。
运行结果
1
4、请阅读以下代码,写出以下程序的执行结果
function print(){
var x = 1;
if(x == "1") console.log("One!");
if(x === "1") console.log("Two!");
}
print();
分析
此题考查的是"= = "和 "= = ="的用法。
= = =称为等同符,当两边值的类型相同时,直接比较值,若类型不相同,直接返回false;
= =:称为等值符,当等号两边的类型相同时,直接比较值是否相等,若不相同,则先转化为类型相同的值,再进行比较;
当进行x = = "1"运算时,“1”会转化为数字1,此时if语句返回true。当进行x=== "1"运算时,由于两边数据类型不同,故直接返回false。
运行结果
One!
5、请阅读以下代码,写出以下程序的执行结果
var bar = {a:"002"};
function print() {
bar.a = 'a';
Object.prototype.b = 'b';
return function inner() {
console.log(bar.a);
console.log(bar.b);
}
}
print()();
分析
print()(),第一个()代表print函数执行,此时返回了函数inner,第二个()代表的是inner函数执行,函数print执行完后bar = {a:‘a’,b:‘b’},所以bar.a = a,bar.b =b。
运行结果
a
b