成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript函數(shù)

v1 / 2613人閱讀

摘要:函數(shù)面試考點(diǎn)比較密集參考阮一峰函數(shù)我的博客關(guān)于作用域變量提升函數(shù)提升的個(gè)人理解筆記函數(shù)的五種聲明方式具名函數(shù)聲明一個(gè)變量七種數(shù)據(jù)類型聲明一個(gè)函數(shù)是個(gè)特例不寫自動加上關(guān)于返回會在傳入的參數(shù)里首先調(diào)用方法但是當(dāng)打印到控制臺的時(shí)候沒有寫雙引號是瀏

JavaScript函數(shù)

面試考點(diǎn)比較密集
參考阮一峰JavaScript函數(shù)
我的博客:關(guān)于作用域,變量提升,函數(shù)提升的個(gè)人理解筆記

1.函數(shù)的五種聲明方式 1.1 具名函數(shù)

var 聲明一個(gè)變量,七種數(shù)據(jù)類型
function 聲明一個(gè)函數(shù),是個(gè)特例
不寫return自動加上return undefined

 function f(x,y){
     return x+y
 }
 f.name // "f"

1.1.1 關(guān)于console.log()

console.log()返回undefined

console.log()會在傳入的參數(shù)里首先調(diào)用toString()方法

但是當(dāng)打印到控制臺的時(shí)候,沒有寫雙引號,是chrome瀏覽器的原因

比如可以在重寫console.log()

1.2 匿名函數(shù)
 var f
 f = function(x,y){
     return x+y
 }
 f.name // "f"

如果要聲明匿名函數(shù),就一定要把它賦給一個(gè)變量

1.3var x = function y(){}
var f
 f = function f2(x,y){ return x+y }
 f.name // "f2"
 console.log(f2) // undefined

直接聲明function y(){}var x = function y(){}的區(qū)別


然后刷新頁面


直接報(bào)錯(cuò),說y沒有定義

區(qū)別:

第一種方式可以打印,第二種打印說不存在.
第一種整個(gè)外面的區(qū)域都可以訪問y,第二種只有函數(shù)內(nèi)部才可以訪問到y(tǒng).(可以訪問的區(qū)域就是綠色圈起來的區(qū)域)

1.4 window.Function
window.Function

 var f = new Function("x","y","return x+y")
 f.name // "anonymous"

基本不會用

1.5 箭頭函數(shù)

箭頭函數(shù)都是匿名函數(shù),沒有名字,就像是匿名函數(shù)的簡寫形式

三種

箭頭函數(shù)

 var f = (x,y) => {
     return x+y
 }
 var sum = (x,y) => x+y//如果return只有一個(gè),可以省略return和{}
 var n2 = n => n*n//如果參數(shù)只有一個(gè),可以省略()

五種方式總結(jié)

2.函數(shù)的name屬性

所有的函數(shù)都有一個(gè)name屬性,他是一個(gè)字符串

1具名函數(shù)
 function f(x,y){
     return x+y
 }
 f.name // "f"
 
2匿名函數(shù)
 var f
 f = function(x,y){
     return x+y
 }
 f.name // "f"
 
3具名函數(shù)賦值
 var f
 f = function f2(x,y){ return x+y }
 f.name // "f2"
 console.log(f2) // undefined
 
4window.Function
 var f = new Function("x","y","return x+y")
 f.name // "anonymous"
 
5箭頭函數(shù)
 var f = (x,y) => {
     return x+y
 }

f.name//"f"
3.函數(shù)的本質(zhì) 3.1函數(shù)的調(diào)用

調(diào)用的英文單詞call
函數(shù)在內(nèi)存中為字符串

3.1.1函數(shù)在內(nèi)存中:


即函數(shù)也是一個(gè)對象,廣義上

3.1.2 eval()函數(shù)

給一個(gè)字符串.返回的為:字符串轉(zhuǎn)化成代碼然后執(zhí)行."

3.1.3函數(shù)就是對象

模擬函數(shù)本質(zhì)

函數(shù)是一個(gè)對象,里面有參數(shù),函數(shù)體,調(diào)用方法
f是函數(shù),是對象,f.call()是一個(gè)執(zhí)行函數(shù)體的方法

總結(jié)

js中有七種數(shù)據(jù)類型,

number string boolean null undefined
symbol **object**

前六種是簡單類型,object是前6種的各種組合,所以是復(fù)雜類型
原型鏈

3.1.4函數(shù)的調(diào)用:f(1,2)f.call(undefined,1,2)

f(1,2)是簡單用法
f.call(undefined,1,2)才是真實(shí)的用法


用call 便于理解this,是硬核技術(shù)
call用法:

參數(shù)從第二個(gè)開始

4.thisarguments

arguments是參數(shù)數(shù)組

4.1 this

特例:當(dāng)call()的第一個(gè)參數(shù)是undefined的時(shí)候, thiswindow.

當(dāng)啟用嚴(yán)格模式的時(shí)候,call 里的第一個(gè)參數(shù)是什么,this 就是什么

this的作用先不說

4.2 arguments是參數(shù)組成的偽數(shù)組

偽數(shù)組:里面有0123這些次序,也有l(wèi)ength,長得像數(shù)組,但是.偽數(shù)組的__proto__沒有指向的是 Array.prototype,或者說原型鏈中沒有Array.prototype,即原型鏈中沒有和Array.prototype有關(guān)的 ,也就是說只是一個(gè)像數(shù)組的對象而已.

沒有 push

5 call stack 調(diào)用棧

每進(jìn)入一個(gè)函數(shù),就在棧里記錄一個(gè)記號,當(dāng)調(diào)用完之后return的時(shí)候,就跳到做的記號哪里,彈出棧里的記號

調(diào)用演示:
普通調(diào)用
嵌套調(diào)用
遞歸調(diào)用

5.1 Stack Overflow錯(cuò)誤

堆棧溢出

超出call stack調(diào)用棧

segment fault也是一種錯(cuò)誤,c語言里面的
6. 作用域

什么情況下直接使用 a=1 會使a直接變成全局變量(window.a)?
當(dāng)寫a=1這個(gè)代碼的時(shí)候,首先計(jì)算機(jī)會認(rèn)為這是賦值,當(dāng)發(fā)現(xiàn)當(dāng)前作用域沒有聲明a的時(shí)候,就繼續(xù)往上找,看看上一層的作用域有沒有聲明a,就這樣,一直找到window層即全局作用域?qū)?就直接給全局變量window自動聲明一個(gè)a.
就近原則,哪一個(gè)scope離賦值最近,賦值的就是哪一個(gè)作用域
我的博客:關(guān)于作用域,變量提升,函數(shù)提升的個(gè)人理解筆記

這個(gè)f4里面的a只能是他自己本身的作用與和他的父作用域,跟f1里面的a沒有關(guān)系

f4打印出來的a是1


所有的代碼解析完畢,這時(shí)候i已經(jīng)是6.
所以當(dāng)點(diǎn)擊的時(shí)候,已經(jīng)是解析完畢后的i,點(diǎn)擊的時(shí)候就是執(zhí)行最開始綁定過的函數(shù),點(diǎn)擊相當(dāng)于在最后寫下執(zhí)行函數(shù)的代碼,這時(shí)候i已經(jīng)是6了,所以打印出來的是6.for循環(huán)結(jié)束之后就是6.

liTags[i].onclick = function(){
     console.log(i)
}//在這里只是聲明函數(shù),并沒有調(diào)用,運(yùn)行這段代碼只會解析代碼,不會運(yùn)行函數(shù)
//當(dāng)點(diǎn)擊事件發(fā)生的時(shí)候,就相當(dāng)于調(diào)用這個(gè)函數(shù),當(dāng)調(diào)用的時(shí)候,已經(jīng)被解析成6了點(diǎn)擊速度不可能超過解析速度

同理,下面代碼打印出的是6

閉包定義

題目



特例:當(dāng)call()的第一個(gè)參數(shù)是undefined的時(shí)候, thiswindow.

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/95278.html

相關(guān)文章

  • JavaScript專題系列文章

    摘要:專題系列共計(jì)篇,主要研究日常開發(fā)中一些功能點(diǎn)的實(shí)現(xiàn),比如防抖節(jié)流去重類型判斷拷貝最值扁平柯里遞歸亂序排序等,特點(diǎn)是研究專題之函數(shù)組合專題系列第十六篇,講解函數(shù)組合,并且使用柯里化和函數(shù)組合實(shí)現(xiàn)模式需求我們需要寫一個(gè)函數(shù),輸入,返回。 JavaScript 專題之從零實(shí)現(xiàn) jQuery 的 extend JavaScritp 專題系列第七篇,講解如何從零實(shí)現(xiàn)一個(gè) jQuery 的 ext...

    Maxiye 評論0 收藏0
  • JS程序

    摘要:設(shè)計(jì)模式是以面向?qū)ο缶幊虨榛A(chǔ)的,的面向?qū)ο缶幊毯蛡鹘y(tǒng)的的面向?qū)ο缶幊逃行┎顒e,這讓我一開始接觸的時(shí)候感到十分痛苦,但是這只能靠自己慢慢積累慢慢思考。想繼續(xù)了解設(shè)計(jì)模式必須要先搞懂面向?qū)ο缶幊?,否則只會讓你自己更痛苦。 JavaScript 中的構(gòu)造函數(shù) 學(xué)習(xí)總結(jié)。知識只有分享才有存在的意義。 是時(shí)候替換你的 for 循環(huán)大法了~ 《小分享》JavaScript中數(shù)組的那些迭代方法~ ...

    melody_lql 評論0 收藏0
  • JavaScript深入淺出

    摘要:理解的函數(shù)基礎(chǔ)要搞好深入淺出原型使用原型模型,雖然這經(jīng)常被當(dāng)作缺點(diǎn)提及,但是只要善于運(yùn)用,其實(shí)基于原型的繼承模型比傳統(tǒng)的類繼承還要強(qiáng)大。中文指南基本操作指南二繼續(xù)熟悉的幾對方法,包括,,。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。 怎樣使用 this 因?yàn)楸救藢儆趥吻岸?,因此文中只看懂?8 成左右,希望能夠給大家?guī)韼椭?...(據(jù)說是阿里的前端妹子寫的) this 的值到底...

    blair 評論0 收藏0
  • 10分鐘了解Javascript-天碼營

    摘要:然后將構(gòu)造函數(shù)的原型設(shè)為,便實(shí)現(xiàn)了對象繼承。首先,我們定義一個(gè)構(gòu)造函數(shù),并在其中定義一個(gè)局部變量。這里的是局部變量,其作用域仍然存在是閉包現(xiàn)象,而非對象屬性。 Javascript是動態(tài)的,弱類型的,解釋執(zhí)行的程序設(shè)計(jì)語言。 Javascript極其靈活,支持多種程序設(shè)計(jì)范式:面向?qū)ο?、指令式、函?shù)式。JavaSCript最初被用于瀏覽器腳本,現(xiàn)在已經(jīng)是所有主流瀏覽器的默認(rèn)腳本語言。瀏...

    trigkit4 評論0 收藏0
  • 學(xué)習(xí)React之前你需要知道的的JavaScript基礎(chǔ)知識

    摘要:和類在開始時(shí)遇到類組件,只是需要有關(guān)類的基礎(chǔ)。畢竟,中的條件呈現(xiàn)僅再次顯示大多數(shù)是而不是特定的任何內(nèi)容。 在我的研討會期間,更多的材料是關(guān)于JavaScript而不是React。其中大部分歸結(jié)為JavaScript ES6以及功能和語法,但也包括三元運(yùn)算符,語言中的簡寫版本,此對象,JavaScript內(nèi)置函數(shù)(map,reduce,filter)或更常識性的概念,如:可組合性,可重用...

    bitkylin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<