资源描述:
《javascript修改作用域外变量的方法_javascript技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、JavaScript修改作用域外变量的方法1.今犬在看JavaScript学习指南的时候做的课后习题,也因此详细的对函数的传入参数进行比较深入的研究.题目如下:函数如何才能修改其作用域Z外的变量?编写一个函数,由1〜5的数字组成的数组作为参数,调用该函数后将把英屮的数字项替换为相应的字符串表示形式.需要注意知识点:在JavaScript中函数参数的传递,对于基于原始值的参数进行值传递(数字,字符吊,布尔值),函数中的修改不会影响实际参数值•而传递给函数的参数而言,对彖是一个引用,对其的修改的将会反映在主
2、调程序屮•〈-但是,会有这样的情况,如下varouter_number=;varoutcr_boolcan二true;varouter_array=;varouterobject二{test:〃〃};functiondisplay(num,bool,arr,obj){console.1og(〃number:〃+num+〃boolean:〃+bool+〃array:〃+arr+〃object:"+obj.tcst);}functiontest(num,bool,arr,obj){display
3、(num,bool,arr,obj);//num=,bool二true,arrays[,,],object,test二num二;bool二false;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_
4、number,outer_boolean,outer_array,outer_object);display(outer_number,outer_boolean,outer_array,outer_object);//num二、bool二true,arrays八],object.test=在上面代码屮我们创建了4个全局变量,类型分别为数字,布尔值,数组,对象.2个函数,display和test.display执行了4次,分别结果如下:〃number:2boolean:truearray:1,2,3ob
5、ject:122,z<-传入函数时的值mber:0boolean:falsearray:1,2,3,3object:134z,<-执行更改"number:。boolcan:falsearray:3,2,1object:133"〈-重新赋值mber:2boolean:truearray:1,2,3,3object:134,z<-函数执行完毕后可以看出我们对数组和对彖的重新赋值并没有成功,如果按引用传递,那么我们应该也对全局变量的数组和对象重新赋值修改了呀.其实JavaScript中所谓的按引用赋值并不是真
6、正意义上的按引用复制,准确说应该是按共享传递•也可以叫按对象传递,按对象共享传递(callbysharing)・在这个按共享传递的条件下,我们获取的引用可以说只是实参引用的副本,它和我们经常说的按引用传递的最大差别就在于我们在对引用副本的赋值不会影响实参的值,正如我们上面那样做的那样,赋值操作是不可行的.当然我们从对象类型和基本类型两方面看,对象是可变的而基本类型是不可变的(注意!字符串修改其实是返回的新的字符串),所以按共享传递对于基本类型来说也是符合按共享传递的.总结一下:JavaScript'I1
7、,基木类型和对象都按共享传递(callbysharing),但是由于JavaScript的基本类型的不变性,基本类型按共享传递与按值传递没有任何区别,而对象按共享传递.按共享传递(callbysharing):传递的是实参引用的副本,我们对引用副本的赋值不影响实参的值,但是可以使用引用副木去修改引用的内容•详细的wiki地址函数对传入的参数:1.基本类型,按值传递(或者也可以说按共享传递),内部赋值修改都不影响主调程序2.对象类型,按共享传递,传入的为实参引用的副木,内部对该引用的赋值无效,对对象属性的
8、赋值修改有效.大概就是这么理解了,假如冇什么地方我犯了什么错误,也希與能被指出來.下面单独拉出JavaScript作用域任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。全局作用域(GlobalScope)在代码中任何地方都能访问到的对象拥有全局作用域,一般來说以下几种情形拥冇全局作用域:(1)最外层函