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

資訊專欄INFORMATION COLUMN

JavaScript中的函數(shù)與作用域

jayce / 412人閱讀

摘要:函數(shù)函數(shù)是什么函數(shù)是這樣的一段代碼它只定義一次但可能被執(zhí)行或調(diào)用多次簡單來說函數(shù)就是一組可重用的代碼可以在程序的任何地方調(diào)用定義函數(shù)函數(shù)聲明方式定義函數(shù)時函數(shù)體的內(nèi)容是不會被執(zhí)行的這是一個函數(shù)字面量直接量方式這是一個函數(shù)調(diào)用函數(shù)定義一個函數(shù)

函數(shù)

函數(shù)是什么

函數(shù)是這樣的一段JavaScript代碼 它只定義一次 但可能被執(zhí)行或調(diào)用多次
簡單來說 函數(shù)就是一組可重用的代碼 可以在程序的任何地方調(diào)用

定義函數(shù)

函數(shù)聲明方式

定義函數(shù)時 函數(shù)體的內(nèi)容是不會被執(zhí)行的

function fun(){
    console.log("這是一個函數(shù)");
}

字面量/直接量方式

var fun = function(){
    console.log("這是一個函數(shù)");
}
調(diào)用函數(shù)

定義一個函數(shù)并不會自動的執(zhí)行它 定義了函數(shù)僅僅是賦予函數(shù)以及名稱并明確函數(shù)被調(diào)用時該做些聲明 調(diào)用函數(shù)才會真正執(zhí)行這些動作

定義一個函數(shù)fun

function fun(){
    console.log("這是一個函數(shù)");
}

調(diào)運函數(shù)

fun();    //輸出字符串:這是一個函數(shù)
函數(shù)的參數(shù)

函數(shù)的參數(shù)就相當于在函數(shù)中使用的變量(雖然這個比方不是很準確) JavaScript中的函數(shù)定義并未制定函數(shù)參數(shù)的可續(xù) 函數(shù)調(diào)用時也為對傳入的參數(shù)做任何的類型檢查

函數(shù)的參數(shù)分為形參和實參

形參:出現(xiàn)在函數(shù)定義文法中的參數(shù)列表是函數(shù)的形式參數(shù) 簡稱形參 簡單的說 就是定義函數(shù)使用的參數(shù)就是形參
1.形參的定義方式 類似于變量的(不需要任何關(guān)鍵字)
2.形參默認未定義任何值時 - undefined
實參:函數(shù)調(diào)用時實際傳入的參數(shù)是函數(shù)的實際參數(shù) 簡稱實參 簡單的說 就是調(diào)用函數(shù)時使用的參數(shù)就是實參

function fun( one, two){
    console.log( one, two);
}
fun(1, 2); //輸出 3
//定義函數(shù)fun時 one和two就是函數(shù)的形參;調(diào)用fun時 1和2就是函數(shù)的實參

形參與實參的區(qū)別:
1.形參的個數(shù)與實參不一定是一致的
2.形參的個數(shù)多于實參的個數(shù) 多余的形參沒有值(默認為 undefined)
3.實參的個數(shù)多于形參的個數(shù) 多余的實參沒有對應(yīng)的形參
4.形參與實參根據(jù)站位符進行一一對應(yīng)

return語句

函數(shù)的return語句:
1.并不是必要的 可有可無
2.作用:作為函數(shù)的返回值(數(shù)據(jù)內(nèi)容)
3.用法:一般會被編寫在函數(shù)體的最后面
4.的確允許不編寫在函數(shù)體的最后面
5.一旦return語句不在函數(shù)體的最后面 return語句之后的代碼都不再執(zhí)行

function fun(){
    console.log("這是一個函數(shù)");
    return 100;
}
console.log(fun());/* 打印函數(shù)調(diào)用的結(jié)果 */
console.log(fun);/* 打印變量的值 */

function fn(){
    console.log("這是return語句之前...");
    return;
    console.log("這是return語句之后...");
}
var result = fn();
console.log(result);
預(yù)定義函數(shù)

JavaScript預(yù)定義了一組函數(shù) 又稱為全局函數(shù) 允許直接使用

eval()函數(shù)

eval()函數(shù)用于執(zhí)行以字符串(String)形式出現(xiàn)的JavaScript代碼
作用:講一個字符串類型的JavaScript代碼轉(zhuǎn)換為真正的JavaScript代碼

var str = "console.log("這是一段代碼...")";
eval(str);

decodeURI()函數(shù)

對已編碼的統(tǒng)一資源標識符(URI)進行解碼 并返回其非編碼形式

var uri="http://www.qianduan.com/web%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91";
var decode=decodeURI(uri);
/*輸出結(jié)果:http://www.qianduan.com/web前端開發(fā),對后面的編碼進行解碼成中文*/
console.log(decode);

encodeURI()函數(shù)

對統(tǒng)一資源標識符(URI)進行編碼 并返回編碼后的URI字符串

var uri="http://www.qianduan.com/web前端開發(fā)";
var encode=encodeURI(uri);
/*輸出結(jié)果:http://www.qianduan.com/web%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91
對后面中文部分進行編碼
*/
console.log(encode);
作用域

作用域是什么

變量和函數(shù)都具有作用域 作用域就是變量和函數(shù)的可被訪問的范圍 控制著變量和函數(shù)的可見性和生命周期
變量的作用域可被分為全局作用域和局部作用域(函數(shù)作用域) 如果變量是被定義在全局作用域的話 在JavaScript代碼中的任何位置都可以訪問該變量 如果變量被定義在指定函數(shù)內(nèi)部 在JavaScript代碼中只能在該函數(shù)內(nèi)部訪問該變量
函數(shù)的作用域也可被分為全局作用域和局部作用域(函數(shù)作用域) 被定義在指定函數(shù)內(nèi)部的函數(shù)被稱為局部函數(shù)或內(nèi)部函數(shù)

變量的作用域

全局變量

在所有函數(shù)之外聲明的變量 叫做全局變量 因為他可以被當前文檔中的其他代碼所訪問

var str="wolongqianduan";//定義全局變量str
//在全局作用域訪問全局變量str
//輸出結(jié)果:字符串的wolongqianduan
console.log(str);
function fun(){
//在函數(shù)作用域訪問全局變量str
//輸出結(jié)果:字符串的wolongqianduan
    console.log(str);
}
//調(diào)用fun
fun();

局部變量

在函數(shù)內(nèi)部聲明的變量 叫做局部聲明 因為它只能在該函數(shù)內(nèi)部訪問

var num = 200;
/*
    * 局部變量 - 作用于當前函數(shù)作用域中
      * 局部變量的值 - 只能在當前函數(shù)作用域進行初始化
    * 函數(shù)的參數(shù) - 作用于當前函數(shù)體中
      * 參數(shù)的值(實參) - 在全局作用域中傳遞的
 */
function fun(a){
    var v = 100;

    console.log(v + a);
}
fun(num);

按值傳遞

按值傳遞就是指將實參變量的值復(fù)制一份副本給函數(shù)的形參變量 在JavaScript中為函數(shù)傳遞參數(shù)是 都是按值傳遞的
如果向函數(shù)傳遞的參數(shù)是原始類型數(shù)據(jù) 則在函數(shù)中修改參數(shù)變量的值 不會影響外部實參的變量

/* 按值傳遞 */
var num = 100;/* 定義一個全局變量 */
/* 定義一個函數(shù) */
function fun(num){/* 形參 */
    num++;
    console.log("這是函數(shù)內(nèi)部的值: " + num);// 101
}
/* 調(diào)用指定函數(shù) - 實參傳遞的是全局變量的值 */
fun(num);/* 實參 */
/* 調(diào)用指定全局變量 */
console.log("這是全局作用域的值: " + num);// 100 


var v = 200;
function fn(){
    v++;
}
fn();
console.log(v);// 201
聲明提前

JavaScript變量的另一種特別之處 可以引用后面聲明的變量 而不會引發(fā)異常 這一概念成為變量聲明提前
JavaScript變量感覺上是被舉起或提升到了所有函數(shù)和語句之前 然而提升后的變量將返回undefined值 所以即使在使用或引用某個變量之后存在聲明和初始化操作 仍得到undefined值

全局變量與局部變量聲明

/*
    聲明提前
    console.log(num); - 先調(diào)用
    var num = 100;    - 再定義
    以上代碼等價于以下代碼
    var num;          - 定義變量,但未初始化值
    console.log(num); - 調(diào)用變量
    num = 100;        - 變量初始化值
 */
console.log(num);// undefined

var num = 100;/* 定義全局變量 */
/* 定義函數(shù) */
function fun(){
    // 全局變量與局部變量同名時 - 在當前函數(shù)作用域中只能訪問局部變量
    console.log(num);// undefined

    var num = 200;/* 定義局部變量 */
    // 就近原則
    console.log(num);// 200
}
/* 調(diào)用函數(shù) */
fun();
// 局部變量在全局作用域中無法訪問 - 只能訪問全局變量
console.log(num);// 100
函數(shù)的作用域

全局函數(shù)

函數(shù)與變量類似 具有全局作用域和函數(shù)作用域(局部作用域)與全局變量相似 全局函數(shù)是被定義在全局作用域的 任何位置都可以訪問或調(diào)用該函數(shù)

function fun(num1,num2){
    console.log(num1+num2);//輸出  3
}
fun(1,2);

內(nèi)部函數(shù)

一個函數(shù)被定義在另一個函數(shù)的內(nèi)部 被稱為局部函數(shù)或者內(nèi)部函數(shù) 與變量相似 局部函數(shù)只能在當前函數(shù)內(nèi)部訪問 而不能在全局作用域中被訪問

function outer(){//全局函數(shù)
    function inner(){//局部函數(shù)
        console.log("inner");
    } 
    inner();//調(diào)用正常
}
inner();//輸出報錯

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

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

相關(guān)文章

  • 十分鐘快速了解《你不知道的 JavaScript》(上卷)

    摘要:最近剛剛看完了你不知道的上卷,對有了更進一步的了解。你不知道的上卷由兩部分組成,第一部分是作用域和閉包,第二部分是和對象原型。附錄詞法這一章并沒有說明機制,只是介紹了中的箭頭函數(shù)引入的行為詞法。第章混合對象類類理論類的機制類的繼承混入。 最近剛剛看完了《你不知道的 JavaScript》上卷,對 JavaScript 有了更進一步的了解。 《你不知道的 JavaScript》上卷由兩部...

    趙春朋 評論0 收藏0
  • 理解JavaScript的核心知識點:作用

    摘要:也毫不例外,但在中作用域的特性與其他高級語言稍有不同,這是很多學(xué)習(xí)者久久難以理清的一個核心知識點。主要使用的是函數(shù)作用域。 關(guān)于作用域:About Scope 作用域是程序設(shè)計里的基礎(chǔ)特性,是作用域使得程序運行時可以使用變量存儲值、記錄和改變程序的狀態(tài)。JavaScript 也毫不例外,但在 JavaScript 中作用域的特性與其他高級語言稍有不同,這是很多學(xué)習(xí)者久久難以理清的一個核...

    HelKyle 評論0 收藏0
  • JavaScript作用閉包的理解

    摘要:作用域是最重要的概念之一,想要學(xué)好就需要理解作用域和作用域鏈的工作原理。腳本錯誤腳本錯誤由此可以引發(fā)作用域鏈的概念在中,函數(shù)也是對象,實際上,里一切都是對象。當一個函數(shù)創(chuàng)建后,它的作用域鏈會被創(chuàng)建此函數(shù)的作用域中可訪問的數(shù)據(jù)對象填充。 作用域是JavaScript最重要的概念之一,想要學(xué)好JavaScript就需要理解JavaScript作用域和作用域 鏈的工作原理。 1. 全局作...

    tianhang 評論0 收藏0
  • JavaScript作用閉包的理解

    摘要:作用域是最重要的概念之一,想要學(xué)好就需要理解作用域和作用域鏈的工作原理。腳本錯誤腳本錯誤由此可以引發(fā)作用域鏈的概念在中,函數(shù)也是對象,實際上,里一切都是對象。當一個函數(shù)創(chuàng)建后,它的作用域鏈會被創(chuàng)建此函數(shù)的作用域中可訪問的數(shù)據(jù)對象填充。 作用域是JavaScript最重要的概念之一,想要學(xué)好JavaScript就需要理解JavaScript作用域和作用域 鏈的工作原理。 1. 全局作...

    darcrand 評論0 收藏0
  • JavaScript作用閉包的理解

    摘要:作用域是最重要的概念之一,想要學(xué)好就需要理解作用域和作用域鏈的工作原理。腳本錯誤腳本錯誤由此可以引發(fā)作用域鏈的概念在中,函數(shù)也是對象,實際上,里一切都是對象。當一個函數(shù)創(chuàng)建后,它的作用域鏈會被創(chuàng)建此函數(shù)的作用域中可訪問的數(shù)據(jù)對象填充。 作用域是JavaScript最重要的概念之一,想要學(xué)好JavaScript就需要理解JavaScript作用域和作用域 鏈的工作原理。 1. 全局作...

    BaronZhang 評論0 收藏0

發(fā)表評論

0條評論

jayce

|高級講師

TA的文章

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