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