成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

js 2-函數(shù)

andot / 1425人閱讀

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

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

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

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

1.變量前置就是把變量的聲明提前到當前作用域的最前面,但變量的賦值仍然按照原來的順序執(zhí)行,如果變量聲明但未被賦值,變量會自動賦值為undefined。
2.函數(shù)的聲明前置有兩種情況,一個是使用函數(shù)聲明,則整個聲明都前置,而且會被前置到變量聲明的后面;另一個是使用函數(shù)表達式,那么規(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ù)表達式方式定義函數(shù),類似變量提升,var sayAge為undefined所以調(diào)用函數(shù)時提示不是函數(shù)
    var sayAge = function(age){
        console.log(age);
    };

同名變量提升

    function fn(){} //先變量提升var fn,再函數(shù)提升var fn=function(){},因為同名所以此時函數(shù)提升覆蓋變量提升,fn為函數(shù) 
    var fn = 3;  //fn=3,此時fn的值為3
    console.log(fn); //輸出3
函數(shù)的arguments

函數(shù)中默認的arguments對象是獲取的函數(shù)在執(zhí)行中傳遞進函數(shù)的實際參數(shù)。arguments只在函數(shù)內(nèi)部起作用,并且永遠指向當前函數(shù)的調(diào)用者傳入的所有參數(shù)。arguments類似Array即類數(shù)組對象,但它不是一個Array。即使函數(shù)不定義任何參數(shù),arguments還是可以拿到參數(shù)的值。arguments常用來檢測傳遞進函數(shù)的參數(shù)個數(shù)。類數(shù)組對象轉(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ù)個數(shù)不同或者參數(shù)順序不同都被認為是不同的函數(shù),稱為函數(shù)重載。在JavaScript中沒有函數(shù)重載的概念,函數(shù)通過名字確定唯一性,參數(shù)不同也被認為是相同的函數(shù),后面的覆蓋前面的。JS函數(shù)重載用arguments來遍歷傳遞進函數(shù)的參數(shù),根據(jù)參數(shù)的值來執(zhí)行不同的代碼。

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

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

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

1.在大多數(shù)語言中都是用花括號{}來形成一個作用域,俗稱塊作用域,但是在JavaScript中{ }并沒有帶來塊作用域(ES6除外)。ES5中作用域分全局作用域和函數(shù)作用域,函數(shù)作用域內(nèi)定義的變量函數(shù)外不可以訪問。
2.函數(shù)內(nèi)聲明變量加var代表局部變量,如果函數(shù)內(nèi)聲明變量不加var,則聲明變量是全局變量。全局作用域的變量實際上是被綁定到window的一個屬性。
3.由于JavaScript的函數(shù)可以嵌套,此時,內(nèi)部函數(shù)可以訪問外部函數(shù)定義的變量,反過來則不行。任何變量(函數(shù)也視為變量),如果沒有在當前函數(shù)作用域中找到,就會繼續(xù)往上查找,最后如果在全局作用域中也沒有找到,則報ReferenceError錯誤。JavaScript的函數(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/107895.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

    molyzzx 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<