摘要:函數面試考點比較密集參考阮一峰函數我的博客關于作用域變量提升函數提升的個人理解筆記函數的五種聲明方式具名函數聲明一個變量七種數據類型聲明一個函數是個特例不寫自動加上關于返回會在傳入的參數里首先調用方法但是當打印到控制臺的時候沒有寫雙引號是瀏
JavaScript函數
面試考點比較密集
參考阮一峰JavaScript函數
我的博客:關于作用域,變量提升,函數提升的個人理解筆記
var 聲明一個變量,七種數據類型
function 聲明一個函數,是個特例
不寫return自動加上return undefined
function f(x,y){ return x+y } f.name // "f"1.1.1 關于console.log()
console.log()返回undefined
console.log()會在傳入的參數里首先調用toString()方法
但是當打印到控制臺的時候,沒有寫雙引號,是chrome瀏覽器的原因
比如可以在重寫console.log()
1.2 匿名函數var f f = function(x,y){ return x+y } f.name // "f"
如果要聲明匿名函數,就一定要把它賦給一個變量
var f f = function f2(x,y){ return x+y } f.name // "f2" console.log(f2) // undefined
直接聲明function y(){}與var x = function y(){}的區別
然后刷新頁面
直接報錯,說y沒有定義
區別:
第一種方式可以打印,第二種打印說不存在.
第一種整個外面的區域都可以訪問y,第二種只有函數內部才可以訪問到y.(可以訪問的區域就是綠色圈起來的區域)
window.Function var f = new Function("x","y","return x+y") f.name // "anonymous"
基本不會用
1.5 箭頭函數箭頭函數都是匿名函數,沒有名字,就像是匿名函數的簡寫形式
三種
箭頭函數 var f = (x,y) => { return x+y } var sum = (x,y) => x+y//如果return只有一個,可以省略return和{} var n2 = n => n*n//如果參數只有一個,可以省略()五種方式總結 2.函數的name屬性
所有的函數都有一個name屬性,他是一個字符串
1具名函數 function f(x,y){ return x+y } f.name // "f" 2匿名函數 var f f = function(x,y){ return x+y } f.name // "f" 3具名函數賦值 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箭頭函數 var f = (x,y) => { return x+y } f.name//"f"3.函數的本質 3.1函數的調用
調用的英文單詞call
函數在內存中為字符串
即函數也是一個對象,廣義上
給一個字符串.返回的為:字符串轉化成代碼然后執行."
模擬函數本質
函數是一個對象,里面有參數,函數體,調用方法
f是函數,是對象,f.call()是一個執行函數體的方法
js中有七種數據類型,
number string boolean null undefined symbol **object**
前六種是簡單類型,object是前6種的各種組合,所以是復雜類型
原型鏈
f(1,2)是簡單用法
f.call(undefined,1,2)才是真實的用法
用call 便于理解this,是硬核技術
call用法:
參數從第二個開始
arguments是參數數組
特例:當call()的第一個參數是undefined的時候, this 是 window.
當啟用嚴格模式的時候,call 里的第一個參數是什么,this 就是什么
this的作用先不說
偽數組:里面有0123這些次序,也有length,長得像數組,但是.偽數組的__proto__沒有指向的是 Array.prototype,或者說原型鏈中沒有Array.prototype,即原型鏈中沒有和Array.prototype有關的 ,也就是說只是一個像數組的對象而已.
沒有 push
每進入一個函數,就在棧里記錄一個記號,當調用完之后return的時候,就跳到做的記號哪里,彈出棧里的記號
調用演示:
普通調用
嵌套調用
遞歸調用
堆棧溢出
超出call stack調用棧
segment fault也是一種錯誤,c語言里面的6. 作用域
什么情況下直接使用 a=1 會使a直接變成全局變量(window.a)?
當寫a=1這個代碼的時候,首先計算機會認為這是賦值,當發現當前作用域沒有聲明a的時候,就繼續往上找,看看上一層的作用域有沒有聲明a,就這樣,一直找到window層即全局作用域層,就直接給全局變量window自動聲明一個a.
就近原則,哪一個scope離賦值最近,賦值的就是哪一個作用域
我的博客:關于作用域,變量提升,函數提升的個人理解筆記
這個f4里面的a只能是他自己本身的作用與和他的父作用域,跟f1里面的a沒有關系
f4打印出來的a是1
所有的代碼解析完畢,這時候i已經是6.
所以當點擊的時候,已經是解析完畢后的i,點擊的時候就是執行最開始綁定過的函數,點擊相當于在最后寫下執行函數的代碼,這時候i已經是6了,所以打印出來的是6.for循環結束之后就是6.
liTags[i].onclick = function(){ console.log(i) }//在這里只是聲明函數,并沒有調用,運行這段代碼只會解析代碼,不會運行函數 //當點擊事件發生的時候,就相當于調用這個函數,當調用的時候,已經被解析成6了點擊速度不可能超過解析速度
同理,下面代碼打印出的是6
特例:當call()的第一個參數是undefined的時候, this 是 window.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95278.html
摘要:專題系列共計篇,主要研究日常開發中一些功能點的實現,比如防抖節流去重類型判斷拷貝最值扁平柯里遞歸亂序排序等,特點是研究專題之函數組合專題系列第十六篇,講解函數組合,并且使用柯里化和函數組合實現模式需求我們需要寫一個函數,輸入,返回。 JavaScript 專題之從零實現 jQuery 的 extend JavaScritp 專題系列第七篇,講解如何從零實現一個 jQuery 的 ext...
摘要:設計模式是以面向對象編程為基礎的,的面向對象編程和傳統的的面向對象編程有些差別,這讓我一開始接觸的時候感到十分痛苦,但是這只能靠自己慢慢積累慢慢思考。想繼續了解設計模式必須要先搞懂面向對象編程,否則只會讓你自己更痛苦。 JavaScript 中的構造函數 學習總結。知識只有分享才有存在的意義。 是時候替換你的 for 循環大法了~ 《小分享》JavaScript中數組的那些迭代方法~ ...
摘要:理解的函數基礎要搞好深入淺出原型使用原型模型,雖然這經常被當作缺點提及,但是只要善于運用,其實基于原型的繼承模型比傳統的類繼承還要強大。中文指南基本操作指南二繼續熟悉的幾對方法,包括,,。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。 怎樣使用 this 因為本人屬于偽前端,因此文中只看懂了 8 成左右,希望能夠給大家帶來幫助....(據說是阿里的前端妹子寫的) this 的值到底...
摘要:然后將構造函數的原型設為,便實現了對象繼承。首先,我們定義一個構造函數,并在其中定義一個局部變量。這里的是局部變量,其作用域仍然存在是閉包現象,而非對象屬性。 Javascript是動態的,弱類型的,解釋執行的程序設計語言。 Javascript極其靈活,支持多種程序設計范式:面向對象、指令式、函數式。JavaSCript最初被用于瀏覽器腳本,現在已經是所有主流瀏覽器的默認腳本語言。瀏...
摘要:和類在開始時遇到類組件,只是需要有關類的基礎。畢竟,中的條件呈現僅再次顯示大多數是而不是特定的任何內容。 在我的研討會期間,更多的材料是關于JavaScript而不是React。其中大部分歸結為JavaScript ES6以及功能和語法,但也包括三元運算符,語言中的簡寫版本,此對象,JavaScript內置函數(map,reduce,filter)或更常識性的概念,如:可組合性,可重用...
閱讀 1048·2021-11-22 15:33
閱讀 3357·2021-11-08 13:20
閱讀 1368·2021-09-22 10:55
閱讀 2053·2019-08-29 11:08
閱讀 771·2019-08-26 12:24
閱讀 3068·2019-08-23 17:15
閱讀 2225·2019-08-23 16:12
閱讀 1933·2019-08-23 16:09