JS函数内部属性之arguments和this实例解析

 更新时间:2018年10月07日 09:48:33   作者:子闲  
在函数内部,有两个特殊的对象:arguments和this。这篇文章主要介绍了函数内部属性之arguments和this ,需要的朋友可以参考下

在函数内部,有两个特殊的对象:arguments和this。

1、arguments

  arguments是一个类数组对象。包含着传入函数中的所有参数。但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。

  经典案例:阶乘函数

function factorial(num){
  if(num <= 1){
    return 1;
  }else{
    return num * factorial(num-1);
  }
}

定义阶乘函数一般都要用到递归算法,如上所示,但你会发现,这个函数的执行与函数名factorial紧紧耦合在了一起,为解决这个问题,我们可以使用arguments.callee。

function factorial(num){
  if(num <= 1){
    return 1;
  }else{
    return num * arguments.callee(num-1);
  }
}

我们重写之后,factorial()函数里没有引用函数名factorial。这样无论引用函数时使用的是什么名字,都可以保证正常完成递归调用。例如:

var trueFac = factorial;

factorial = function(){
  return 0;
}

console.log(trueFac(5)); // 120
console.log(factorial(5)); // 0

2、this

函数内部的另一个对象是this,this引用的是函数执行的环境对象(当在网页的全局作用域中调用函数时,this对象引用的就是window)。

window.color = "red";
var o = { color: "blue" };

function sayColor(){
  alert(this.color);
}

sayColor(); // "red"

o.sayColor = sayColor;
o.sayColor(); // "blue"

在上面这个函数sayColor()是在全局作用域中定义的,它引用了this对象。由于在调用函数之前,this的值并不确定,因此this可能会在代码执行过程中引用不同的对象。

当在全局作用域中调用sayColor()时,this引用的时全局对象window;换句话说,对this.color求值会转换成对window.color求值,于是结果就返回了"red"。而当把这个函数赋给对象o并调用o.sayColor()时,this引用的是对象o,因此对this.color求值会转换成对o.color求值,所以返回“blue”。

函数的名字仅仅是一个包含指针的变量。

总结

以上所述是小编给大家介绍的JS函数内部属性之arguments和this实例解析,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

相关文章

  • javascript oop开发滑动(slide)菜单控件

    javascript oop开发滑动(slide)菜单控件

    这里因为是演示所以让HTML CSS尽量的简化,另外使用jquery的 fn.slideUp fn.slideDown 实现起来会更容易不过我作为一个专业的开发者多了解些原生的JS对技术的提高还是很有帮助。
    2010-08-08
  • 详解CocosCreator项目结构机制

    详解CocosCreator项目结构机制

    这篇文章主要介绍了详解CocosCreator项目结构机制,只有了解这些机制后,才能更好的进行项目开发,避免潜在错误,并且快速的除错
    2021-04-04
  • JavaScript中保留小数点后N位方法总结

    JavaScript中保留小数点后N位方法总结

    这篇文章主要为大家详细介绍了JavaScript中保留小数点后N位的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-06-06
  • JS前端解压zip的方法和技巧分享

    JS前端解压zip的方法和技巧分享

    这篇文章主要介绍了JS前端解压zip的方法和技巧,业务中有时候需要获取某个 zip 压缩包内的文件内容展示到前端,在 zip 包体积不是那么大的时候并且不涉及压缩包解密的时候,可以考虑纯前端方案,需要的朋友可以参考下
    2024-03-03
  • 基于JavaScript的数据结构队列动画实现示例解析

    基于JavaScript的数据结构队列动画实现示例解析

    这篇文章主要介绍了基于JavaScript的数据结构队列动画实现示例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 去掉gridPanel表头全选框的小例子

    去掉gridPanel表头全选框的小例子

    这篇文章介绍了去掉gridPanel表头全选框的小例子,有需要的朋友可以参考一下
    2013-07-07
  • three.js安装和使用完整步骤

    three.js安装和使用完整步骤

    Three.js是一个JavaScript库,用于在Web浏览器中创建3D Web图形,下面这篇文章主要给大家介绍了关于three.js安装和使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • 微信小程序MoxB实现全局状态管理流程详解

    微信小程序MoxB实现全局状态管理流程详解

    这篇文章主要介绍了微信小程序使用MoxB实现全局状态管理方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-11-11
  • js中substring使用示例详解

    js中substring使用示例详解

    substring是从中截取一段字符串,在组成一个新的字符串,这篇文章主要介绍了js中substring使用示例小结,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • event对象获取方法总结在google浏览器下测试

    event对象获取方法总结在google浏览器下测试

    Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态,Event对象的获取方法如下,感兴趣的朋友可以参考下
    2013-11-11

最新评论