摘要:四函數的屬性函數的屬性列表這個屬性先略過上述的屬性都可以通過函數名屬性來引用,是形參的個數。如果是函數表達式的話,是空串。看代碼注意嚴格模式下不能訪問對象的屬性
一、new function的用法
1.用法一
此種用法的跟使用{}的區別是:它比較靈活,可以在內部定義變量、函數等
var obj = new function(){ var a = 1; var b = 2; this.total = a + b; return a + b; // 被忽略 }
相當于:
var obj = { total : 3 }
2.用法二
此種用法就是閉包而已
var test = new function(){ var a = 1; var b = 2; return function(c){ return a + b + c; } } test(3);//6
相當于:
var test = (function(){ var a = 1; var b = 2; return function(c){ return a + b + c; } })(); test(3);//6二、Function.prototype.apply.call的用法
function log(){ if(window.console){ // 第一個參數是apply要執行的函數,第二個參數為context,第三個參數為要執行函數的參數列表 Function.prototype.apply.call(console.log,console,arguments); // Function.apply.call(console.log,console,arguments); // 也是可以的。 } }三、構造函數中return
1.構造函數return基本類型的值
function Person(){ var a = 2; this.a = a; return a; } var p = new Person(); console.dir(p); // 此時p的值并不是2,而是一個有一個屬性a其值為2的對象
2.構造函數return Object類型的值
function Person(){ var a = 2 return { name:"李彥峰", a : a } } var p = new Person(); console.dir(p); // 此時p為一個對象 {name:"李彥峰",a:2}
結論:
在構造器中 return ,如果是基本類型的值,那么使用 new 操作符將會按照預期,返回一個對象,就相當于構造函數中的 return 語句不存在一樣
在構造器中如果 return 的是一個Object類型(function/基本類型的包裝類型/Object類型),那么 new 操作符就相當于不存在一樣,也就是說,js引擎會把 return 出去的引用值作為變量,而不會把 new 出來的新對象的引用賦值給相應的變量。。
四、函數的屬性
函數的屬性列表
arguments
caller
length
name
prototype(這個屬性先略過)
上述的屬性都可以通過 函數名.屬性來引用,length是形參的個數。如果是函數表達式的話,name是空串。
function outer(a,b,c){ console.log(outer.arguments); // [1,2,3,4] console.log(outer.caller); // null console.log(outer.length); // 3 console.log(outer.name); // outer function inner(){ console.log(inner.arguments); // [] console.log(inner.caller); // 打印出整個函數體 console.log(inner.length); // 0 console.log(inner.name); // inner // 內部函數訪問外部函數的屬性 console.log(arguments.callee.caller.arguments); // [1,2,3,4] // console.log(inner.caller.arguments); // [1,2,3,4] console.log(arguments.callee.caller.caller); // null // console.log(inner.caller.caller); // null console.log(arguments.callee.caller.length); // 3 // console.log(inner.caller.length); // 3 console.log(arguments.callee.caller.name); // outer // console.log(inner.caller.name); // outer } inner(); } outer(1,2,3,4);五、局部變量
對于局部聲明的重復變量,只有第一個聲明有效,也就是說,js引擎會忽略除了第一個之外的所有的聲明
// 第一種 function test(){ var name = "李彥峰"; var name; console.log(name); // 李彥峰 } // 第二種 function test(){ var name; var name = "李彥峰"; console.log(name); // 李彥峰 }
注意:第二種好像不符合 對于局部聲明的重復變量,只有第一個聲明有效的說法,其實也是符合的,因為js引擎會對函數進行2輪處理,局部變量的聲明在第1輪處理(變量聲明提升),所以第1輪會保證只有一個name被聲明,第2輪才進行局部變量的初始化(代碼執行到賦值語句才進行初始化),即會把第1輪聲明的局部變量賦值。。
嚴格模式下不能通過函數名.arguments的方式訪問arguments對象,不能訪問caller屬性
六、argumentsarguments對象擁有一個callee屬性,該屬性是一個指針,指向擁有這個arguments對象的函數
arguments對象內部屬性值是跟參數一一對應的,改變其中一個的值都會影響另外一個。
看代碼:
function test(a,b,c){ console.log(arguments); // [1,2,4] a = 8; console.log(arguments); // [8,2,4] arguments[1] = 909; console.log(b); // 909 console.log(arguments); // [8,909,4] } test(1,2,4);
注意:嚴格模式下不能訪問arguments對象的callee屬性
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78958.html
摘要:真正留給我們要實現的僅僅是返回另外一部分用于局部應用的一元函數罷了。總結各用一句話做個小結吧局部應用是一種轉換技巧,通過預先傳入一個或多個參數來把多元函數轉變為更少一些元的函數甚或是一元函數。 局部應用(Partial Application,也譯作偏應用或部分應用)和局部 套用( Currying, 也譯作柯里化),是函數式編程范式中很常用的技巧。 本文著重于闡述它們的...
摘要:原文的框架以前叫做允許你使用和編寫跨平臺的桌面應用。這個教程向我們展示了如何使用和構建一個桌面應用。我們的應用看起來會是這個樣子配置開發環境是微軟的一款跨平臺代碼編輯器。是基于和微軟自身的開發的。我們需要用我們最終構建的應用來替換它。 原文:Creating Desktop Applications With AngularJS and GitHub Electron showImg(...
摘要:使用自定義菜單此系列文章的應用示例已發布于可以或下載后運行查看歡迎使用和模塊可用于創建自定義本地菜單有兩種菜單應用程序頂部菜單和上下文右鍵單擊菜單在瀏覽器中打開完整的文檔創建應用程序菜單支持進程使用和模塊可以自定義你的應用程序菜單如果 使用 Electron 自定義菜單 此系列文章的應用示例已發布于 GitHub: electron-api-demos-Zh_CN. 可以 Clone ...
摘要:通過集成,可以從零開始,快速搭建出實時音視頻通信平臺,可以應用于語音和視頻社交在線教育和培訓遠程醫療在線會議直播等多種業務場景。集成之前,需要在官網控制臺創建應用。使用服務之前,首先需要注冊賬號并且完成實名認證。確定后,自動生成。通過集成URTC SDK,可以從零開始,快速搭建出實時音視頻通信平臺,可以應用于語音和視頻社交、在線教育和培訓、遠程醫療、在線會議、直播等多種業務場景。 集成URT...
閱讀 1148·2021-09-22 15:43
閱讀 2345·2021-09-22 15:32
閱讀 4455·2021-09-22 15:11
閱讀 2188·2019-08-30 15:55
閱讀 2564·2019-08-30 15:54
閱讀 984·2019-08-30 15:44
閱讀 1095·2019-08-29 13:26
閱讀 794·2019-08-29 12:54