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

資訊專欄INFORMATION COLUMN

js 2-函數(shù)

andot / 1401人閱讀

摘要:代碼示例返回參數(shù)平方和函數(shù)的重載在靜態(tài)語言中相同名字的函數(shù),如果其參數(shù)個(gè)數(shù)不同或者參數(shù)順序不同都被認(rèn)為是不同的函數(shù),稱為函數(shù)重載。立即執(zhí)行函數(shù)的作用函數(shù)立即執(zhí)行,先括號(hào)聲明函數(shù)然后括號(hào)調(diào)用函數(shù)。

函數(shù)聲明和函數(shù)表達(dá)式的區(qū)別

函數(shù)聲明:
function functionName(){ statement; }
函數(shù)表達(dá)式:
var printName = function(){ console.log("Byron"); };
對(duì)于函數(shù)聲明,js解析器會(huì)優(yōu)先讀?。ㄅc變量提升類似,整個(gè)函數(shù)聲明也會(huì)預(yù)先解析
),確保在所有代碼執(zhí)行之前聲明已經(jīng)被解析。而函數(shù)表達(dá)式,如同定義其它基本類型的變量一樣,定義變量名和賦值分兩個(gè)階段,定義變量名被提升,函數(shù)賦值過程并沒有一起被提升。具體表現(xiàn)在,當(dāng)使用函數(shù)聲明的形式來定義函數(shù)時(shí),可將調(diào)用語句寫在函數(shù)聲明之前,而函數(shù)表達(dá)式,調(diào)用語句寫函數(shù)表達(dá)式前面會(huì)出錯(cuò)。當(dāng)聲明同一名稱的函數(shù)和變量時(shí),變量聲明在函數(shù)聲明前面,后面的函數(shù)聲明會(huì)覆蓋前面變量的聲明。如果一個(gè)函數(shù)的聲明被括號(hào)括起來,此時(shí)是一個(gè)語句,函數(shù)聲明不會(huì)被提升(前置)由于JavaScript的這一怪異的“特性”,我們?cè)诤瘮?shù)內(nèi)部定義變量時(shí),請(qǐng)嚴(yán)格遵守“在函數(shù)內(nèi)部首先申明所有變量”這一規(guī)則。最常見的做法是用一個(gè)var申明函數(shù)內(nèi)部用到的所有變量

變量,函數(shù)的聲明前置

1.變量前置就是把變量的聲明提前到當(dāng)前作用域的最前面,但變量的賦值仍然按照原來的順序執(zhí)行,如果變量聲明但未被賦值,變量會(huì)自動(dòng)賦值為undefined。
2.函數(shù)的聲明前置有兩種情況,一個(gè)是使用函數(shù)聲明,則整個(gè)聲明都前置,而且會(huì)被前置到變量聲明的后面;另一個(gè)是使用函數(shù)表達(dá)式,那么規(guī)則和變量的聲明前置一樣。
代碼示例:

console.log(a);  //undefined  聲明變量,變量提升 var a,還未執(zhí)行賦值,所以a為undefined
var a = 1;      //a=1;        執(zhí)行變量賦值,a=1;
console.log(b);  //b is not defined  b未聲明
// 以函數(shù)聲明方式定義函數(shù),函數(shù)聲明提升,調(diào)用函數(shù)的語句可寫在函數(shù)聲明語句前
sayName("world")
function sayName(name){
    console.log("hello ", name);
}

  sayAge(10); //sayAge is not a function 以函數(shù)表達(dá)式方式定義函數(shù),類似變量提升,var sayAge為undefined所以調(diào)用函數(shù)時(shí)提示不是函數(shù)
    var sayAge = function(age){
        console.log(age);
    };

同名變量提升

    function fn(){} //先變量提升var fn,再函數(shù)提升var fn=function(){},因?yàn)橥源藭r(shí)函數(shù)提升覆蓋變量提升,fn為函數(shù) 
    var fn = 3;  //fn=3,此時(shí)fn的值為3
    console.log(fn); //輸出3
函數(shù)的arguments

函數(shù)中默認(rèn)的arguments對(duì)象是獲取的函數(shù)在執(zhí)行中傳遞進(jìn)函數(shù)的實(shí)際參數(shù)。arguments只在函數(shù)內(nèi)部起作用,并且永遠(yuǎn)指向當(dāng)前函數(shù)的調(diào)用者傳入的所有參數(shù)。arguments類似Array即類數(shù)組對(duì)象,但它不是一個(gè)Array。即使函數(shù)不定義任何參數(shù),arguments還是可以拿到參數(shù)的值。arguments常用來檢測(cè)傳遞進(jìn)函數(shù)的參數(shù)個(gè)數(shù)。類數(shù)組對(duì)象轉(zhuǎn)數(shù)組使用Array.prototype.slice.call(arguments)方法。
代碼示例:
返回參數(shù)平方和

function sumOfSquares(){
     var sum=0;
     for(var i=0;i

JS函數(shù)的重載

在靜態(tài)語言中相同名字的函數(shù),如果其參數(shù)個(gè)數(shù)不同或者參數(shù)順序不同都被認(rèn)為是不同的函數(shù),稱為函數(shù)重載。在JavaScript中沒有函數(shù)重載的概念,函數(shù)通過名字確定唯一性,參數(shù)不同也被認(rèn)為是相同的函數(shù),后面的覆蓋前面的。JS函數(shù)重載用arguments來遍歷傳遞進(jìn)函數(shù)的參數(shù),根據(jù)參數(shù)的值來執(zhí)行不同的代碼。

立即執(zhí)行函數(shù)的作用

函數(shù)立即執(zhí)行,先括號(hào)聲明函數(shù)然后括號(hào)調(diào)用函數(shù)。
(function(){ })( )(函數(shù)聲明)(函數(shù)調(diào)用)或者(function( ){ }( ))
立即執(zhí)行函數(shù)表達(dá)式一般不需要給函數(shù)命名,因?yàn)橹恍枰⒖虉?zhí)行并返回一個(gè)結(jié)果就行。函數(shù)立即執(zhí)行的作用:
1.不必為函數(shù)命名,避免了污染全局變量,立即執(zhí)行完成后被內(nèi)存回收。
2.IIFE內(nèi)部形成了一個(gè)多帶帶的作用域(因?yàn)榧恿死ㄌ?hào)成為了一個(gè)語句),可以封裝一些外部無法讀取的私有變量

什么是函數(shù)的作用域鏈

1.在大多數(shù)語言中都是用花括號(hào){}來形成一個(gè)作用域,俗稱塊作用域,但是在JavaScript中{ }并沒有帶來塊作用域(ES6除外)。ES5中作用域分全局作用域和函數(shù)作用域,函數(shù)作用域內(nèi)定義的變量函數(shù)外不可以訪問。
2.函數(shù)內(nèi)聲明變量加var代表局部變量,如果函數(shù)內(nèi)聲明變量不加var,則聲明變量是全局變量。全局作用域的變量實(shí)際上是被綁定到window的一個(gè)屬性。
3.由于JavaScript的函數(shù)可以嵌套,此時(shí),內(nèi)部函數(shù)可以訪問外部函數(shù)定義的變量,反過來則不行。任何變量(函數(shù)也視為變量),如果沒有在當(dāng)前函數(shù)作用域中找到,就會(huì)繼續(xù)往上查找,最后如果在全局作用域中也沒有找到,則報(bào)ReferenceError錯(cuò)誤。JavaScript的函數(shù)在查找變量時(shí)從自身函數(shù)定義開始,從“內(nèi)”向“外”查找。如果內(nèi)部函數(shù)定義了與外部函數(shù)重名的變量,則內(nèi)部函數(shù)的變量將“屏蔽”外部函數(shù)的變量。

"use strict";
function foo() {
    var x = 1; 
    function bar() {
        var y = x + 1; // bar可以訪問foo的變量x! 
    } 
    var z = y + 1; // ReferenceError! foo不可以訪問bar的變量y!
}

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

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

相關(guān)文章

  • JS 利用高階函數(shù)實(shí)現(xiàn)函數(shù)緩存(備忘模式)

    摘要:所以這里可以利用高階函數(shù)的思想來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的緩存,我可以在函數(shù)內(nèi)部用一個(gè)對(duì)象存儲(chǔ)輸入的參數(shù),如果下次再輸入相同的參數(shù),那就比較一下對(duì)象的屬性,把值從這個(gè)對(duì)象里面取出來。 1. 高階函數(shù) 高階函數(shù)就是那種輸入?yún)?shù)里面有一個(gè)或者多個(gè)函數(shù),輸出也是函數(shù)的函數(shù),這個(gè)在js里面主要是利用閉包實(shí)現(xiàn)的,最簡(jiǎn)單的就是經(jīng)??吹降脑谝粋€(gè)函數(shù)內(nèi)部輸出另一個(gè)函數(shù),比如 var test = function...

    hightopo 評(píng)論0 收藏0
  • 尚學(xué)堂 react -后臺(tái)管理系統(tǒng)開發(fā)流程

    摘要:項(xiàng)目開發(fā)準(zhǔn)備描述項(xiàng)目技術(shù)選型接口接口文檔測(cè)試接口啟動(dòng)項(xiàng)目開發(fā)使用腳手架創(chuàng)建項(xiàng)目開發(fā)環(huán)境運(yùn)行生產(chǎn)環(huán)境打包運(yùn)行管理項(xiàng)目創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù)創(chuàng)建本地倉(cāng)庫(kù)配置將本地倉(cāng)庫(kù)推送到遠(yuǎn)程倉(cāng)庫(kù)在本地創(chuàng)建分支并推送到遠(yuǎn)程如果本地有修改新的同事克隆倉(cāng)庫(kù)如果遠(yuǎn)程修 day01 1. 項(xiàng)目開發(fā)準(zhǔn)備 1). 描述項(xiàng)目 2). 技術(shù)選型 3). API接口/接口文檔/測(cè)試接口 2. 啟動(dòng)項(xiàng)目開發(fā) 1). 使用react...

    lemon 評(píng)論0 收藏0
  • [譯]執(zhí)行上下文、作用域鏈和JS內(nèi)部機(jī)制

    摘要:執(zhí)行上下文作用域鏈和內(nèi)部機(jī)制一執(zhí)行上下文執(zhí)行上下文是代碼的執(zhí)行環(huán)境,它包括的值變量對(duì)象和函數(shù)。創(chuàng)建作用域鏈一旦可變對(duì)象創(chuàng)建完,引擎就開始初始化作用域鏈。 執(zhí)行上下文、作用域鏈和JS內(nèi)部機(jī)制(Execution context, Scope chain and JavaScript internals) 一、執(zhí)行上下文 執(zhí)行上下文(Execution context EC)是js代碼的執(zhí)...

    caozhijian 評(píng)論0 收藏0
  • 從底層看JS執(zhí)行機(jī)制

    摘要:作用域鏈用于表明上下文的執(zhí)行順序。當(dāng)前上下文執(zhí)行完畢則出棧,執(zhí)行下一個(gè)上下文。 從一個(gè)簡(jiǎn)單的例子出發(fā) 先從一個(gè)簡(jiǎn)單的例子出發(fā)(先不涉及異步),看看自己是否大致了解瀏覽器的執(zhí)行機(jī)制: console.log(a); var a=1; function foo(a){ console.log(a); var a=2; console.log(a); } foo(a)...

    thursday 評(píng)論0 收藏0
  • 10分鐘理解JS引擎的執(zhí)行機(jī)制

    摘要:深入理解引擎的執(zhí)行機(jī)制靈魂三問為什么是單線程的為什么需要異步單線程又是如何實(shí)現(xiàn)異步的呢中的中的說說首先請(qǐng)牢記點(diǎn)是單線程語言的是的執(zhí)行機(jī)制。 深入理解JS引擎的執(zhí)行機(jī)制 1.靈魂三問 : JS為什么是單線程的? 為什么需要異步? 單線程又是如何實(shí)現(xiàn)異步的呢? 2.JS中的event loop(1) 3.JS中的event loop(2) 4.說說setTimeout 首先,請(qǐng)牢記2...

    zzbo 評(píng)論0 收藏0
  • javascript引擎執(zhí)行的過程的理解--語法分析和預(yù)編譯階段

    摘要:所以覺得把這個(gè)執(zhí)行的詳細(xì)過程整理一下,幫助更好的理解。類似的語法報(bào)錯(cuò)的如下圖所示三預(yù)編譯階段代碼塊通過語法分析階段之后,語法都正確的下回進(jìn)入預(yù)編譯階段。另開出新文章詳細(xì)分析,主要介紹執(zhí)行階段中的同步任務(wù)執(zhí)行和異步任務(wù)執(zhí)行機(jī)制事件循環(huán)。 一、概述 js是一種非常靈活的語言,理解js引擎的執(zhí)行過程對(duì)于我們學(xué)習(xí)js是非常有必要的??戳撕芏噙@方便文章,大多數(shù)是講的是事件循環(huán)(event loo...

    molyzzx 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<