函数的内置属性
注意 : 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
總結
- 上一篇: [常用类]Scanner 类
- 下一篇: MxNet 模型转Tensorflow