题目一
function fun(){
var i=0;
return function(){
document.write(i++);
}
}
var f1=fun();
f2=fun();
f1();//0
f1();//1
f2();//0
这是一个闭包,f1()和f2()执行的是function(),但是fun()中的i此时还在内存中,所以i是可以被调用,主要点在于f1()和f2()分别创建了两个各自的执行环境
,两者之间互不影响,所以结果是 0 1 0。
题目二
var color = 'red';
var test = {
color:'blue',
getColor:function(){
var color='green';
alert(this.color);
}
}
var getColor=test.getColor;
getColor();
test.getColor();
//输出red blue
var getColor=test.getColor; 代表的是 function函数的代码赋给getColor,
所以此时 getColor(); 为
function(){
var color='green';
alert(this.color);
}
再根据this总是指向调用它的对象,此时是window调用,所以输出 red
test.getColor(); 此时this指向test,所以输出blue。
题目三
var i = 10
function aaa () {
i = 20
console.log(i) //20
for (var i = 0; i < 6; i++) {
console.log(i) // 0 1 2 3 4 5
}
console.log(this.i) //g 10
console.log(i) // 6
}
aaa()
console.log(i)//10
第一个输出 由于给局部变量i赋值 所以输出20
第二个输出for循环 输出0 1 2 3 4 5,当i = 6时终止循环
第三个输出,在一般函数中使用this指代全局对象,此是this.i = window.i 输出10
第四个输出,上面for循环结束后i =6 ,所以输出6
第五个输出,输出全局变量 i =10
题目四
+function(){
var a=5;
function a(){}
alert(a) //5
function b(){}
b=6;
alert(b); // 6
var c=d=b;
//var c = d = b; 可以写为 d = b; var c = d;
//所以b被赋值给window下的d,c是私有变量,所以window下没有定义c;
}()
alert(d); // 6
alert(c); //报错 c is not defined
题目五
function fn(){
console.log(11);
function ff(){
console.log(22)
}
ff()
}
fn(); //11 22
ff(); //报错 ff is not defined
题目六
var User = {
count: 1,
getCount: function () {
return this.count;
}
};
console.log(User.getCount()); // 1
var func = User.getCount;
console.log(func()); // undefined
getCount函数被User对象调用,所以this指向的是User,输出1。
func变量接收的是一个函数体:func()执行的时候, this指的是window, 而window中没有count这个属性。 所以,返回的是undefined。
题目七
var y = 'global';
function test(x){
(function(){
if(x){
var y = 'local';
}
})();
return y;
}
console.log(test(true));//global
var y = 'local’这一句中y的作用域是匿名函数,即this指向Windows,故返回全局变量global
题目八
function fn(i) {
return function (n){
console.log(n + (i++));
}
}
var f = fn(10);
f(20); //30
fn(20)(40); //60
fn(40)(50); // 90
f(30); //41
题目九
var arr = [1,2,3,4];
function fn(arr) {
arr[0] = 0;
arr = [0]; //arr指向新的引用地址
arr[0] = 100;
return arr;
}
var res = fn(arr);
console.log(arr,res);
// [0,2,3,4] [100]
题目十
var a = 9;
function fn() {
a = 0;
return function (b) {
return b + a++;
}
}
var f = fn();
console.log(f(5)); //5
console.log(fn()(5)); //5
console.log(f(5)); //6
console.log(a); //2