关于 js 函数参数的this

先看一道面试题:

var number = 10;
function fn() {
  console.log(this.number);
}
var obj = {
  number: 2,
  show: function(fn) {
    this.number = 3;
    fn();
    arguments[0]();
  }
};
obj.show(fn);

打印的结果如下:

obj.show 中,第一个函数执行 fn() 结果为 10,第二个 arguments[0]() 执行结果为 undefined。

原因是:

第一个 fn 在执行时,this 指向 window,window,number 为10;

第二个 fn 在执行时,实际上为 argements.0 在执行,也就是此时的 this 为 arguments(毕竟 arguments 为伪数组,伪数组也还是对象,可理解为 obj.0)。因为 arguments 的属性中没有 number 这个属性,所以返回 undefined

原文地址:https://www.cnblogs.com/momo798/p/11772624.html

时间: 2024-07-30 12:00:26

关于 js 函数参数的this的相关文章

js 函数参数个数

js中的函数参数个数不是确定区别函数的,也就是说你定义一个函数A(x,y)    当你使用这个函数时,你可以A();A(1);A(1,2);A(1,2,3);都是调用这个A(x,y)函数. 例子: <html> <head> <title> 函数调用测试,参数个数和函数声明不一样多 </title> <script language="JavaScript"> function needTwoPara(p1,p2){ var

(转)js函数参数设置默认值

原文:http://www.cnblogs.com/RightDear/archive/2013/06/26/3156652.html js函数参数设置默认值 php有个很方便的用法是在定义函数时可以直接给参数设默认值,如: function simue ($a=1,$b=2){   return $a+$b; } echo simue(); //输出3 echo simue(10); //输出12 echo simue(10,20); //输出30 但js却不能这么定义,如果写function

JS 函数参数

1.简单的无参函数调用 function Test1(Func) { Func(); } function Test2() { alert("我要被作为函数参数啦!"); } //使用 Test1(Test2); 2.简单的有参数的函数调用 function Test1(Func) { Func(data2); } function Test2(data1) { alert(data1); } //使用 Test1(Test2("李杰")); 3. 匿名函数作为函数

js 函数参数 arguments[0]

function box() {            return arguments[0] + '|' + arguments[1];                    }        alert(box(1, 2, 3, 4, 5, 6)); 输出:1|2 说明:1 ECMAScript 函数不介意传递进来多少参数,也不会因为参数不统一而错误.实际上,函数体内可以通过 arguments 对象来接收传递进来的参数.    2 arguments 对象的 length 属性可以得到参数

JS 函数参数 及 函数数组

<script> function a(){ alert("a"); } function b(){ alert("b"); } var arr = []; function addEvent(o,f){ o.blur=f(); var n = arr.length; while(n--){ if(arr[n]==f) return; } arr.push(f); } function Run(){ for(var i=0;i<arr.length

js 的函数参数的默认值问题

js函数参数设置默认值 php有个很方便的用法是在定义函数时可以直接给参数设默认值,如: function simue ($a=1,$b=2){ return $a+$b; } echo simue(); //输出3 echo simue(10); //输出12 echo simue(10,20); //输出30 但js却不能这么定义,如果写function simue(a=1,b=2){}会提示缺少对象. js函数中有个储存参数的数组arguments ,所有函数获得的参数会被编译器挨个保存到

javascript函数参数

js函数参数有显式参数(Parameters)即形参和隐式参数(Arguments)实参 1.显式参数(Parameters)即形参在函数定义时列出. function functionName(parameter1, parameter2, parameter3){ //要执行的代码 } 2.隐式参数(Arguments)即实参在函数调用时传递给函数的真正的值 function add(){ console.log(arguments[0], arguments[1], arguments[2

js函数中参数的传递

先看一道JS的笔试题: var setObj=function(o){ o.name="xiaoming"; o={}; o.name="xiaohong"; } var p={name:"xixi",age:24}; setObj(p); console.log(p); 答案是{name:xiaoming,age24}: 在JavaScript中函数参数默认为引用类型. 在阅读本章节之前建议参阅一下两章节:1.值类型可以参阅javascript

JS中的函数(二):函数参数(你可能不知道的参数传递)

前言: 函数分为有参有返回值,有参无返回值,无参无返回值,无参有返回值:那么对于无参数的函数你想使用函数的调用怎么办呢?如果你想封装一个代码,实现多种功能,但是形参大于实参或者实参大于形参又该如何?本文就发生函数调用过程中,值传递,参数的不对等处理原则等关于参数的一些相关操作进行阐述. 1.实参数大于形参数: function say(name,message){ console.log('Hello' + name + message); } say('World!','ByeBye!','W