javascript笔试题(二)

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

猜你喜欢

转载自blog.csdn.net/qq_40951289/article/details/103556345