JavaScript修改作用域外變量的方法_javascript技巧_第1頁
JavaScript修改作用域外變量的方法_javascript技巧_第2頁
JavaScript修改作用域外變量的方法_javascript技巧_第3頁
JavaScript修改作用域外變量的方法_javascript技巧_第4頁
全文預覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、javascript修改作用域外變量的方法1. 今犬在看javascript學習指南的時候做的課后習題,也因此詳細的對函數(shù)的 傳入?yún)?shù)進行比較深入的研究.題目如下:函數(shù)如何才能修改其作用域z外的變量?編寫一個函數(shù),由15的數(shù)字組成 的數(shù)組作為參數(shù),調(diào)用該函數(shù)后將把英屮的數(shù)字項替換為相應(yīng)的字符串表示形 式.需要注意知識點:在javascript中函數(shù)參數(shù)的傳遞,對于基于原始值的參數(shù)進行值傳遞(數(shù)字, 字符吊,布爾值),函數(shù)中的修改不會影響實際參數(shù)值而傳遞給函數(shù)的參數(shù)而言, 對彖是一個引用,對其的修改的將會反映在主調(diào)程序屮-但是,會有這樣的情況, 如下var outer_number =;var

2、outcr_boolcan 二 true;var outer_array =;var outerobject 二test:;function display(num, bool, arr, obj) console. 1og(number:+num+nboolean:+bool+narray:+arr+nobject: "+obj. tcst);function test (num, bool, arr, obj) display (num, bool, arr, obj);/num=, bool二true, arrays, , object, test二num 二;bool 二 f

3、alse;arr =;obj.test =;display(num, bool, arr, obj);/num=, bool二false,arrays,object.test二 arr =;obj = test;display (num, bool, arr, obj) ;/num=, bool二false, array=, , object. test=test(outer_number, outer_boolean, outer_array, outer_object);di splay(outer_number, outer_boolean, outer_array, outer_obj

4、ect);/num二、bool二true, arrays八,object. test=在上面代碼屮我們創(chuàng)建了 4個全局變量,類型分別為數(shù)字,布爾值,數(shù)組,對象.2 個函數(shù),display 和 test.display執(zhí)行了 4次,分別結(jié)果如下:number:2boolean:truearray: 1, 2, 3object: 122,z<-傳入函數(shù)時的值mber:0boolean:falsearray: 1, 2, 3, 3object: 134z,<-執(zhí)行更改"number:。boolcan:falsearray:3, 2, 1object: 133"-重新賦

5、值mber:2boolean:truearray: 1, 2, 3, 3object: 134,z<-函數(shù)執(zhí)行完畢后可以看出我們對數(shù)組和對彖的重新賦值并沒有成功,如果按引用傳遞,那么我們 應(yīng)該也對全局變量的數(shù)組和對象重新賦值修改了呀.其實javascript中所謂的按引用賦值并不是真正意義上的按引用復制,準確說 應(yīng)該是按共享傳遞也可以叫按對象傳遞,按對象共享傳遞(call by sharing)在這個按共享傳遞的條件下,我們獲取的引用可以說只是實參引用的副本,它和 我們經(jīng)常說的按引用傳遞的最大差別就在于我們在對引用副本的賦值不會影響 實參的值,正如我們上面那樣做的那樣,賦值操作是不可行的

6、.當然我們從對象類型和基本類型兩方面看,對象是可變的而基本類型是不可變的 (注意!字符串修改其實是返回的新的字符串),所以按共享傳遞對于基本類型來 說也是符合按共享傳遞的.總結(jié)一下:javascript 'i1,基木類型和對象都按共享傳遞(call by sharing),但是由于 javascript的基本類型的不變性,基本類型按共享傳遞與按值傳遞沒有任何區(qū) 別,而對象按共享傳遞.按共享傳遞(call by sharing):傳遞的是實參引用的副本,我們對引用副本的賦 值不影響實參的值,但是可以使用引用副木去修改引用的內(nèi)容詳細的wiki地址 函數(shù)對傳入的參數(shù):1. 基本類型,按值傳遞

7、(或者也可以說按共享傳遞),內(nèi)部賦值修改都不影響主調(diào) 程序2. 對象類型,按共享傳遞,傳入的為實參引用的副木,內(nèi)部對該引用的賦值無效, 對對象屬性的賦值修改有效.大概就是這么理解了,假如冇什么地方我犯了什么錯誤,也希與能被指出來.下面單獨拉出javascript作用域任何程序設(shè)計語言都有作用域的概念,簡單的說,作用域就是變量與函數(shù)的 可訪問范圍,即作用域控制著變量與函數(shù)的可見性和生命周期。在javascript 中,變量的作用域有全局作用域和局部作用域兩種。全局作用域(global scope)在代碼中任何地方都能訪問到的對象擁有全局作用域,一般來說以下幾種情 形擁冇全局作用域:(1) 最外層

8、函數(shù)和在最外層函數(shù)外面定義的變量擁有全局作用域,例如:var mithorwme二山邊小溪; function dosomcthing() var blogname=,/夢想天空"; function innersay() alert (blogname);inncrseiy ();alert (authorname) ; /山邊小溪 alert (blogname) ; /腳木錯誤 dosomethingo ; /夢想天空 innersay () /腳本錯誤(2) 所冇末定義直接賦值的變量自動聲明為擁冇金局作用域,例如:fundion dosomething() var autho

9、rname二"山邊小溪"; blogname=,/ 夢想天空"alert(authorname); dosomethingo ; /山邊小溪 alert (blogname) ; /夢想天空alert (authorname) ; /腳本錯誤變量blogname擁有全局作用域,而authorname在函數(shù)外部無法訪問到。(3) 所有window對彖的屬性擁有全局作用域一般情況下,window對象的內(nèi)置屬性都擁有全局作用域,例如window, name window. location> window. top 等等。1.局部作用域(local scope)和全局作用域相反,局部作用域一般只在同定的代碼片段內(nèi)可訪問到,最常 見的例如函數(shù)內(nèi)部,所有在一些地方也會看到有人把這種作用域稱為函數(shù)作用 域,例如下列代碼屮的blogname和函數(shù)innersay都只擁有局部作

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論