几道有关于this的面试题
var age= 10; var foo = { x : 20, bar : function(){ var age = 30; console.log(this.age) } }; foo.bar();//20 (foo.bar)();//10 (foo.bar = foo.bar)();//10 (foo.bar,foo.bar)();//
第一道题 我们都很清楚答案。就是谁调用该函数的,this就是指向该调用的对象 第二道题的话,可能不好理解,其实跟第三道题是一样的,都是关于ES5的规范,语句块,语句,甚至是表达式都会隐式地返回一个结果值。 总结如下:结果值是语句、表达式经过逻辑运算后的值,若无逻辑(按顺序执行)则为最后一条的子语句、表达式的值(语句包含子语句),简单的说他就是一个语句、表达式的“隐式的返回值”。JavaScript会计算每一条语句,表达式会返回一个结果值,而对于语句块的结果值,他是最后一提哦啊最外层语句的结果值 详情可以点击
所以第二题可以变换成这样
var age= 10; var foo = { x : 20, bar : function(){ var age = 30; console.log(this.age) } }; var a = foo.bar (a)(); var fn = (foo.bar = foo,bar) (foo.bar = foo.bar)();
所以我们可以看到两个返回的都是引用。并且上下文是在全局是在,所以返回的都是 10,但是在严格模式下是undefined
注意的是:
至于第四题的话也是跟ES5的规范有关,因为在多个语句中是会执行最后的一条子语句,然后他会返回值,作为整个函数的调用。
上一篇:
Java基础知识总结(2021版)
下一篇:
【JS小记】处理牛客网编程题的输入输出