var a = 10;
var obj = {
a:1,
b:2,
c:[{
a:3,
b:4,
eat:function(){
console.log(this.a);
}
}]
}
// obj.c[0].eat();
// 解题思路:
// obj.c[0] 数组c里的第一个对象
// obj.c[0].eat 对象里的匿名函数
// obj.c[0].eat() 匿名函数被数组c里的第一个对象调用,this指向数组c里的第一个对象
// this.a this指向数组c里的第一个对象的属性a
function fun(m,n,o,p,q,r){
alert(this.callee.length)
};
function f(a,b){
arguments[0](9,10,11,12,13);
};
// f(fun,5,6,7);
// 解题思路
// f(fun,5,6,7) f函数执行并且往里面传递了实参fun,5,6,7
// arguments[0](9,10,11,12,13) f函数执行, 枚举出实参数组里的第一项(函数fun)并且执行
// this 被调用的函数fun的this指向f的实参数组 [fun,5,6,7]
// this.callee.length 为f的实参数组里的属性(指向f函数本身),形参个数为2
var a = 4;
function b(x,y,a){
alert(a); //3
arguments[2] = 10; //动态将b函数实参数组中的第三项改为10
alert(a); //10
}
// a = b(1,2,3);
// alert(a);
// b(1,2,3) b函数执行并且往里面传递了实参 1,2,3
// a = b(1,2,3); b函数作为返回值传给变量a 但是b函数中没有return 默认为undifined 所以a为undifined
function fun(f,a,b,c){
arguments[0](5,6);//fun的实参数组的第一项(fn)执行,并且给fn中传入实参
}
function fn(p,q,r,s,t){
alert(this.length);//fun的实参数组的个数
alert(this.callee.length); //fun的形参的个数
alert(arguments.length); // fn的实参个数
alert(arguments.callee.length);//fn的形参个数
};
// fun(fn,8,9,10,11,12); fun函数执行并且往里面传递了实参 fn,8,9,10,11,12
var c =1000;
var obj = {
"a":function(){
return this.b;
},
"b":function f(){
return this.c;
},
"c":1
};
var result = obj.a()();
console.log(result);
// obj.a 拿到属性a的匿名函数
// obj.a() 匿名函数执行 返回值为this.b this指向当前对象obj this.b为属性b的匿名函数
// obj.a()() 属性为b的匿名函数执行 这个函数是通过圆括号调用的 里面的this指向window 返回值为window中的c
//相当于b函数直接圆括号执行
js 函数上下文练习
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 执行上下文 执行上下文可以理解为函数执行的环境,每一个函数执行时,都会给对应的函数创建这样一个执行环境。 作用域 ...