JavaScript关于this的绑定与涉及到函数的调用方式
1.请问以下程序代码输出结果是什么?
var name = 'Thte Window'; var object = { name: 'My Object', getNameFunc: function() { return function() { return this.name; }; } }; alert(object.getNameFunc()()); //输出结果是Thte Window
考点:调用getNameFunc方法的虽然是object,但是getNameFunc返回的是一个匿名函数,匿名函数的执行环境具有全局性,所以this指向window。
2.请问以下程序代码运行结果:
var name = 'Thte Window'; var object = { name: 'My Object', getNameFunc: function() { return function() { return this.name; }; } }; alert(object.getNameFunc()()); //输出结果是Thte Window
考点:this指向调用者arr。输出的arr是数组类型,会隐式调用toString()方法输出每项。
3.求出数组中的最大值 var a=[33,5,77,88,9,31,22]
var a=[33,5,77,88,9,31,22]; alert(Math.max.apply(null,a));//输出结果是88
考点:将数组作为apply的参数传入,返回最大值,由于不需要借用对象,所以第一个参数可以为任意值,但不可以省略。
4.请看以下程序代码:请问会弹出什么结果来?
var a='ts'; function A(){ alert(a);//输出结果是undefined var a=1; alert(a);//输出结果是1 } A();
考点:此题考预解释机制,此题有一个全局变量a和一个函数变量a,当预解释阶段,函数内部a初始化为undefined,只定义未赋值,内部变量a优先级高于外部,当运行函数到第50行时函数内部的变量a此时未赋值,仍然是undefined,当进行到第52行时由于已经进行了赋值运算,所以此时a等于1。
5.请问以下 程序代码输出结果是什么?
var a=1; function b(){ a=10; return; function a(){} } b() alert(a);////输出结果是1
知识点:当预解释阶段,函数内部的a被定义为一个function,当函数执行到99行时局部变量a被初始化为一个数值类型的10,但是出了这个b函数后,当前作用域就不是b函数了,而是全局作用域,此时全局变量a生效,所以弹出的a值为1。