博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数的内置属性
阅读量:5276 次
发布时间:2019-06-14

本文共 1288 字,大约阅读时间需要 4 分钟。

注意 : arguments.caller , arguments.callee  这些在严格模式下会报错.
 
1.  callee 的使用
 
经典阶乘函数 :
  function factorial(num){
    if(num <= 1) return 1 ;
    else return num * factorial(num-1);
  }
 
上面代码进行递归的调用时候,与函数名称耦合度太高
导致在某种情况下调用时,就会得不到意料中的结果.
  var anotherFactorial = factorial ;
  factorial = function(){ return 0 ;}
  anotherFactorial(10); // display 0  
 
使用函数的内置属性 arguments , 以及 callee 进行解耦合:
  function factorial(num){
    if(num<=1) return 1 ;
    else return num * arguments.callee(num-1);
  }
 
这样 当函数名(即引用) 指向其他函数后 ,不会误执行变化后的函数 .结果就是正常结果了.
 
 
2. caller 的使用(配合callee)
 
function outer(){
  inner();
}
function inner(){
  // 这里使用了inner,耦合性高
  console.log(inner.caller);
 
  // 这里对上面输出进行 解耦. 输出的都一样:outer函数的源码.
  console.log(arguments.callee.caller);
}
outer();
 
 
length
  函数的length表示 它想要接收的参数,比如sum(a,b){} 的length为2.
 
call() 以及 apply()
 
function say(word1){
  return `${word1} , ${this.word} !` ;
}
 
var obj = {
    word1 : "hello",
    word : "world"
};
// 以下三种方式 均可以 在this指代的对象上进行调用 sum()函数.
say.call(obj, word1);// call 必须把所有参数用逗号分隔,罗列出来
say.apply(obj, arguments); // apply 接受的是数组来传递参数
say.apply(obj, [word1]);
 
bind()
 
    window.color = 'red';
    var o = {color:"orange"};
 
    function getColor(){
        return this.color;
    }
 
    var getObjColor = getColor.bind(o);
    getObjColor(); // display 'orange'
    getColor(); // display 'red' ;
 

转载于:https://www.cnblogs.com/lmxxlm-123/p/11131847.html

你可能感兴趣的文章
Codeforces 1110 简要题解
查看>>
Python之路【第七篇】:初识Socket
查看>>
hdu 5222
查看>>
tree命令
查看>>
GCD -- 倒计时
查看>>
java集合---迭代器iterator
查看>>
T-SQL and XML
查看>>
linux下安装新硬盘并挂载mount
查看>>
工作中随感
查看>>
【freemarker】渲染列表一系列操作
查看>>
BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】...
查看>>
PHP 数据库访问
查看>>
PHP起点 - PHP常量
查看>>
TopHat
查看>>
P1351 联合权值
查看>>
Oracle EBS PO 接受入库
查看>>
vue-manage-system 后台管理系统开发总结
查看>>
eclipse乱码解决方法
查看>>
JS与OC中的方法相互调用
查看>>
ASP.NET Core开发-使用Nancy框架
查看>>