摘要:函數(shù)的作用域也可被分為全局作用域和局部作用域函數(shù)作用域,被定義在指定函數(shù)內(nèi)部的函數(shù)被稱為局部函數(shù)或內(nèi)部函數(shù)。
作用域
變量和函數(shù)都有作用域,作用域就是變量和函數(shù)可被訪問的范圍,控制著變量和函數(shù)的可見性和生命周期(生命周期指一個(gè)事物開始到結(jié)束中間那一段時(shí)間)
變量的作用域可被分為全局作用域和局部作用域(函數(shù)作用域),如果變量是被定義在全局作用域的話,在JavaScript代碼中的任何位置都可以訪問該變量;如果變量被定義在指定函數(shù)內(nèi)部,在JavaScript代碼中只能在該函數(shù)內(nèi)部訪問該變量。
函數(shù)的作用域也可被分為全局作用域和局部作用域(函數(shù)作用域),被定義在指定函數(shù)內(nèi)部的函數(shù)被稱為局部函數(shù)或內(nèi)部函數(shù)。
所有函數(shù)之外聲明的變量,叫全局變量,它可被當(dāng)前文檔中的其他代碼所訪問
//第一種定義全局變量的方式: var str="hello web";//定義全局變量str //在全局作用域訪問全局變量str //輸出結(jié)果:字符串的hello web console.log(str); function fun(){ //在函數(shù)作用域訪問全局變量str //輸出結(jié)果:字符串的hell web console.log(str); } //調(diào)用fun fun(); //第二種定義全局變量的方式: function fn(){ /*定義變量時(shí)沒有用var關(guān)鍵字,這時(shí)的變量時(shí)全局的, 只要沒用var聲明的默認(rèn)為全局變量*/ str1="this is javaScript"; //輸出結(jié)果:字符串 this is javaScript console.log(str1); } fn(); /*在全局作用域訪問變量str1,此時(shí)同樣可以訪問到,雖然是定義在函數(shù)內(nèi)部, 但是它并沒有用var關(guān)鍵字*/ console.log(str1);//輸出結(jié)果字符串this is javaScript局部變量
在函數(shù)內(nèi)部聲明的變量,叫做局部變量,因?yàn)樗荒茉谠摵瘮?shù)內(nèi)部訪問
function fun(){ //用關(guān)鍵字var定義局部變量str, var str="hello,life"; //在函數(shù)作用域訪問局部變量str console.log(str);//輸出結(jié)果字符串:hello,life } //調(diào)用fun函數(shù) fun(); //在全局作用域訪問局部變量str console.log(str);//報(bào)錯(cuò),全局不允許訪問函數(shù)內(nèi)部定義的局部變量聲明提前
JavaScript變量的另一種特別之處,可以引用后面聲明的變量,而不會(huì)引發(fā)異常,這一概念成為變量聲明提前。JavaScript變量感覺上是被提升到了所有函數(shù)和語句之前,然而提升后的變量將返回undefined值,所以即使在使用或引用某個(gè)變量之后存在聲明和初始化操作,仍得到undefined值
全局變量聲明提前
console.log(str);//不報(bào)錯(cuò),但是輸出結(jié)果:undefined var str="hello";//定義全局變量str console.log(str); //輸出結(jié)果字符串:hello //上述代碼中的第一行輸出不會(huì)報(bào)錯(cuò),而是輸出undefined值,效果等同于下面的代碼 var str;//定義全局變量str,但是不初始化值 console.log(str);//不報(bào)錯(cuò),輸出結(jié)果undefined str="hello";//對(duì)全局變量str進(jìn)行初始化值 console.log(str);//輸出 字符串 hello
局部變量聲明提前
定義在局部變量之前,先調(diào)用該函數(shù)內(nèi)部的變量,結(jié)果不會(huì)報(bào)錯(cuò)
function fn(){ console.log(str);//不報(bào)錯(cuò),輸出 undefined var str="hello";//定義全局變量 str console.log(str);//輸出字符串 hello } fn(); console.log(str);//報(bào)錯(cuò) //上述代碼中的第二行輸出不會(huì)報(bào)錯(cuò),而是輸出undefined,效果等同于下面代碼 function fn(){ var str;//定義局部變量str,但未初始化值 console.log(str);//不報(bào)錯(cuò),輸出結(jié)果undefined str="hello";//定義局部變量 str console.log(str);//輸出結(jié)果字符串 hello }按值傳遞
指將實(shí)參變量的值復(fù)制一份副本給函數(shù)的形參變量,JavaScript中為函數(shù)傳遞參數(shù)時(shí),都是按值傳遞,如果向函數(shù)傳遞的參數(shù)是原始類型數(shù)據(jù),則在函數(shù)中修改參數(shù)變量的值,不會(huì)影響外部實(shí)參的變量
var n=100;//定義全局變量n function fun(n){//參數(shù)變量也屬于局部變量 n++;//修改的是局部變量的n的值 console.log(n);//輸出的是局部變量的n的值 } fun(n);//按值傳遞,方法內(nèi)輸出101 console.log(n);//輸出全局變量的值 100全局函數(shù)
函數(shù)與變量類似,具有全局作用域和函數(shù)作用域(局部作用域),與全局變量相似,全局函數(shù)是被定義在全局作用域的,任何位置都可以訪問或調(diào)用該函數(shù)
function fun(num1,num2){ console.log(num1+num2);//輸出結(jié)果 3 } fun(1,2);//調(diào)用fun同時(shí)傳入實(shí)參1和2內(nèi)部函數(shù)
一個(gè)函數(shù)被定義在另一個(gè)函數(shù)的內(nèi)部,被稱為局部函數(shù)或者內(nèi)部函數(shù),與變量相似,局部函數(shù)只能在當(dāng)前函數(shù)內(nèi)部訪問,而不能在全局作用域中被訪問
function fun(){//全局函數(shù) function inner(){//局部函數(shù) console.log("hello"); } inner();//調(diào)用正常 } inner();//輸出報(bào)錯(cuò)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/96854.html
摘要:作用域作用域是指程序源代碼中定義變量的區(qū)域。采用詞法作用域,也就是靜態(tài)作用域。而與詞法作用域相對(duì)的是動(dòng)態(tài)作用域,函數(shù)的作用域是在函數(shù)調(diào)用的時(shí)候才決定的。前面我們已經(jīng)說了,采用的是靜態(tài)作用域,所以這個(gè)例子的結(jié)果是。 JavaScript深入系列的第二篇,JavaScript采用詞法作用域,什么語言采用了動(dòng)態(tài)作用域??jī)烧叩膮^(qū)別又是什么?還有一個(gè)略難的思考題,快來看看吧。 作用域 作用域是指...
摘要:也毫不例外,但在中作用域的特性與其他高級(jí)語言稍有不同,這是很多學(xué)習(xí)者久久難以理清的一個(gè)核心知識(shí)點(diǎn)。主要使用的是函數(shù)作用域。 關(guān)于作用域:About Scope 作用域是程序設(shè)計(jì)里的基礎(chǔ)特性,是作用域使得程序運(yùn)行時(shí)可以使用變量存儲(chǔ)值、記錄和改變程序的狀態(tài)。JavaScript 也毫不例外,但在 JavaScript 中作用域的特性與其他高級(jí)語言稍有不同,這是很多學(xué)習(xí)者久久難以理清的一個(gè)核...
摘要:講作用域鏈?zhǔn)紫纫獜淖饔糜蛑v起,下面是百度百科里對(duì)作用域的定義作用域在許多程序設(shè)計(jì)語言中非常重要。原文出處談?wù)務(wù)Z法里一些難點(diǎn)問題二 3) 作用域鏈相關(guān)的問題 作用域鏈?zhǔn)莏avascript語言里非常紅的概念,很多學(xué)習(xí)和使用javascript語言的程序員都知道作用域鏈?zhǔn)抢斫鈐avascript里很重要的一些概念的關(guān)鍵,這些概念包括this指針,閉包等等,它非常紅的另一個(gè)重要原因就...
摘要:全局作用域局部作用域局部作用域全局作用域局部作用域塊語句沒有塊級(jí)作用域塊級(jí)聲明包括和,以及和循環(huán),和函數(shù)不同,它們不會(huì)創(chuàng)建新的作用域。局部作用域只在該函數(shù)調(diào)用執(zhí)行期間存在。 一、什么是作用域? 作用域是你的代碼在運(yùn)行時(shí),各個(gè)變量、函數(shù)和對(duì)象的可訪問性。(可產(chǎn)生作用的區(qū)域) 二、JavaScript中的作用域 在 JavaScript 中有兩種作用域 全局作用域 局部作用域 當(dāng)變量定...
摘要:在中的應(yīng)用采用詞法作用域,也就是靜態(tài)作用域。那什么又是詞法作用域或者靜態(tài)作用域呢請(qǐng)繼續(xù)往下看靜態(tài)作用域與動(dòng)態(tài)作用域因?yàn)椴捎玫氖窃~法作用域函數(shù)的作用域在函數(shù)定義的時(shí)候就決定了。 開篇 當(dāng)我們?cè)陂_始學(xué)習(xí)任何一門語言的時(shí)候,都會(huì)接觸到變量的概念,變量的出現(xiàn)其實(shí)是為了解決一個(gè)問題,為的是存儲(chǔ)某些值,進(jìn)而,存儲(chǔ)某些值的目的是為了在之后對(duì)這個(gè)值進(jìn)行訪問或者修改,正是這種存儲(chǔ)和訪問變量的能力將狀態(tài)給...
摘要:依然持有對(duì)該作用域的引用,而這個(gè)引用就叫作閉包。循環(huán)和閉包正常情況下,我們對(duì)這段代碼行為的預(yù)期是分別輸出數(shù)字,每秒一次,每次一個(gè)。 一、作用域 作用域共有兩種主要的工作模型:第一種是最為普遍的,被大多數(shù)編程語言所采用的詞法作用域,另外一種叫作動(dòng)態(tài)作用域; JavaScript所采用的作用域模式是詞法作用域。 1.詞法作用域 詞法作用域意味著作用域是由書寫代碼時(shí)函數(shù)聲明的位置來決定...
閱讀 2110·2023-04-26 00:09
閱讀 3139·2021-09-26 10:12
閱讀 3507·2019-08-30 15:44
閱讀 2874·2019-08-30 13:47
閱讀 935·2019-08-23 17:56
閱讀 3242·2019-08-23 15:31
閱讀 489·2019-08-23 13:47
閱讀 2527·2019-08-23 11:56