精华内容
下载资源
问答
  • ``` <!doctype html> <script src="http://code.jquery.com/jquery-latest.js"></script> $(function(){ var numb=1; ...为什么当numb=3的时候numb不能置为零啊,怎么才能置为零呢
  • JS局部变量改变全局变量

    千次阅读 2016-08-10 09:41:40
    问题就是局部变量改变全局变量了 下面是我想到的一种方法: 把状态变量声明为对象,对象里包含键值对,传参时传递对象,这样就不是只传值,而是传址(暂且这么称呼) (虽然JS里面都是传值,没有传址概念)...
    
    
    <body>
           <button class="bt1">按钮1</button>
           <button class="bt2">按钮2</button>
           <button class="bt3">按钮3</button>
     </body>

    这里是三个按钮,点击按钮1会做一些事,再次点击又会做另外一些事(比如打开关闭)

    由于在同一个按钮上绑定时间,这个时候就需要有个标志,用于判断当前状态(是开还是关?)

    代码可以这么写:

    <pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'Consolas';font-size:16pt;">
    
    $(document).ready(function(){ var state1 = 1, state2 = 1, state3 = 1; $(".bt1").click(function(){ if(state1 == 1){ //doSomething state1 = 0; }else{ //doSomething state1 = 1; } }); $(".bt2").click(function(){ if(state2 == 1){ //doSomething state2 = 0; }else{ //doSomething state2 = 1; } }); $(".bt3").click(function(){ if(state3 == 1){ //doSomething state3 = 0; }else{ //doSomething state3 = 1; } });});
    
    这么写功能上是没有问题,但是显然代码冗余量太大
    

    于是想着写个函数封装一下重复代码,每次写的时候调用一下函数就行了

    var state1 = 1,
        state2 = 1,
        state3 = 1;
    $(document).ready(function(){
        $(".bt1").click(function(){
            changeState(state1);
        });
    });
    
    function changeState(state){
        if(state == 1){
            //doSomething
            state = 0;
            console.log(state);
        }else{
            //doSomething
            state = 1;
            console.log(state);
        }
    }
    但是并不是我想的那样,全局变量state1的值并不会被改变,原来这是因为state1只是把值“1”传递进去了

    函数changeState();中的state是另外的局部变量,这里只是改变了state的值,state1值并不会改变

    所以无论你怎么点,都只会输出“0”,永远不会输出‘1’,因为你传值进去永远都是1

    问题就是局部变量改变全局变量了

    下面是我想到的一种方法:

    把状态变量声明为对象,对象里包含键值对,传参时传递对象,这样就不是只传值,而是传址(暂且这么称呼)

    (虽然JS里面都是传值,没有传址概念)

    var state1 = {
        state : 1
    };
    $(document).ready(function(){
        $(".bt1").click(function(){
            changeState(state1);
        });
    });
    
    function changeState(state){
        if(state.state == 1){
            //doSomething
            state.state = 0;
            console.log(state.state);
        }else{
            //doSomething
            state.state = 1;
            console.log(state.state);
        }
    }
    这样就可以达到想要的效果



    但是这样声明变量又会变得比较麻烦,不过相对于大量使用同一代码片又要高效

    有不对的地方还望指正

    更好的办法还希望大家多多指教

    展开全文
  • 的时候会报错,此时的返回return的$a,应该是函数内部的$a,压根都没有进行声明都直接突然返回了(所以会报错),而上一句则是执行的超全局变量改变的是函数外的全局变量$a; } echo $a; //23 echo ccc...

    1、引用传值


          此时实参传递的不是值,而是传递的是实参指向的地址;

    <?php
    
    	$a = 18;
    	
    	function aaa(&$num){    //  注意,此时的参数前有个 “&” 符号,是地址符号,传递的则不是参数对应的值,二是参数指向的地址了; 
    		
    	  return  $num += 1;
    	}
    	
    	echo $a;             //18          未调用函数时候,直接输出原值;
    	
    	echo aaa($a);        //19          调用函数,将$a的地址传递过来,然后执行函数体内语句,返回;
    	
    	echo $a;             //19          由于$a指向的地址中的内容,发生了变化,所以被函数调用用,$a也发生了变化;
    
    ?>


    2、global关键字:


        global关键字用在变量前,即声明:此变量用的是,代表的是全局变量(在函数内部使用);

    <?php
    
        $gg = 28;
    	
    	function bbb(){
    		
    		global $gg;                  // 注意: 此时 “global” 关键词,用在变量名前,声明这个变量用的是“全局范围”内的$gg;
    		
    		return $gg -= 2;
    	}
    	
    	echo $gg;            // 28 ;       函数未被调用时候,直接原值原样输出;
    	
    	echo bbb();         // 26;         函数被调用,执行函数体内语句,有关键词global声明在变量前,说明此时的变量用的(代表的)是全局变量;
    
        echo $gg;          //  26;         由于函数执行的时候用的是全局变量,所以全局变量$gg 也跟着发生了变化;
    
    ?>


    3、超全局变量:


        (1)、超全局变量在脚本中,任何一个地方都能被访问使用,任意一层函数,任意一个角落;

        (2)、超全局变量主要有$GLOBALS、$_GET、$_POST.......都是以数组的形式展现;

    <?php
    
         $a = 23;
         
    	 $b = 55;
    	 
    	 print_r($GLOBALS);
    
    ?>     

    上述代码执行,打印结果有一部分为:  [a] => 23;   [b] => 55; 即:$GLOBALS变量中,存储了页面内的所有的全局变量;变量名($a,$b)为

    全局变量 变量名($a,$b)为超全局变量$GLOBAL中的健名([a],[b]);

    <?php
    
         $a = 23;
         
    	 $b = 55;
    	 
    	 function ccc(){
    		 
    		 $GLOBALS['a'] += 2;
    		                     //  注意:此时没有函数内的$a;即return $a; 的时候会报错,此时的返回return的$a,应该是函数内部的$a,压根都没有进行声明都直接突然返回了(所以会报错),而上一句则是执行的超全局变量,改变的是函数外的全局变量$a;
    	 }
    	 
    	 
    	 echo $a;   //23
     
         echo ccc();   //  此时没有返回值,函数内只运用、执行、改变了超全局变量;
    
         echo $a;   //25   超全局变量,即变的就是其自身,只不过在函数体内部执行了改变了;
    
    ?>


    4、注意:常量一旦被声明后,也能在函数内,脚本中的任何一个位置被引用;



    展开全文
  • 1. 局部变量和全局变量的区别: 1) 局部变量: 定义在函数内部的变量拥,仅能在被声明的函数内部使用,...3. 函数内部如何改变全局变量的值 1) def只有一层,那么须在全局变量之前加global关键字 2) def多层嵌...

    1. 局部变量和全局变量的区别:
    1) 局部变量: 定义在函数内部的变量拥,仅能在被声明的函数内部使用,函数外无法访问,
    否则,报错
    2) 全局变量: 定义在函数外,作用域是整个py文件,全局范围内都可以访问
    在这里插入图片描述
    2. 局部变量与全局变量命名一样时,那么会优先调用局部变量:
    在这里插入图片描述
    3. 函数内部如何改变全局变量的值
    1) def只有一层,那么须在全局变量之前加global关键字
    在这里插入图片描述
    2) def多层嵌套,深层def修改第一层def中的变量值,则需要 nonlocal 关键字了
    在这里插入图片描述
    3) 如果全局变量是列表类型数据,函数内部进行数据增删改之后,全局变量也会直接更新
    在这里插入图片描述

    展开全文
  • 有时候会因为不注意递归函数中局部变量全局变量,而导致结果和我们期望的不一致,递归中,在递归中的局部变量全局变量,可以类似的看成函数调用时传递方式的按值传递(局部变量)和引用传递(全局变量局部...

    有时候会因为不注意递归函数中局部变量和全局变量,而导致结果和我们期望的不一致,递归中,在递归中的局部变量和全局变量,可以类似的看成函数调用时传递方式的按值传递(局部变量)和引用传递(全局变量)
    局部变量:可以看成两个值,即虽然名字相同,但每次递归时是重新创建的变量,不会覆盖掉上次创建的值;(类似形参与实参不同)
    全局变量:每一次对于全局变量进行操作,就会改变它的值。
    看下面两个简单的程序,看它们的运行结果

    程序一:

    #include <stdio.h>
    void f()
    {
    	char x;
    	scanf("%c",&x);
    	if(x=='*'){
    		printf("%c",x);
    	}
    	else{
    		f();
    		printf("%c",x);
    	}
    	return;
    }
    int main()
    {
    	f();
    	return 0;
    }
    
    输入样例

    abc*

    输出样例

    *cba

    程序2:

    #include <stdio.h>
    char x;
    void f()
    {
    	scanf("%c",&x);
    	if(x=='*'){
    		printf("%c",x);
    	}
    	else{
    		f();
    		printf("%c",x);
    	}
    	return;
    }
    int main()
    {
    	f();
    	return 0;
    }
    
    
    输入样例

    abc*

    输出样例

    由上面两个程序可以看出,它们定义的变量是不一样的,第一个函数的变量x是局部变量,而第二个程序的变量x是全局变量,这就导致了它们的输出结果不一样。

    分析程序1

    在这里插入图片描述
    上面是进入函数f( )后的运行过程,刚开始输入x=a,if为假,再次调用f( )函数,再次输入x=b,以此类推下去,到最后if为真时,输出x= *,再返回输出x=c,以此类推下去,最后的到的结果是 *cba。

    而由于变量x是局部变量,存放在内存的栈区,属于动态存储类别, 占动态存储区空间,函数调用结束后自动释放。
    如:看上面的流程图1,当第⑤执行后,则第四个框内的数据都会被系统回收,x的值就看第三个框,变为c,以此下去,直到结束。所以最后的结果并不会跟程序2的结果一样输出****。

    分析程序2

    在这里插入图片描述
    程序2中的自定义函数f( )与程序1的执行过程差不多,只是变量x变成了全局变量。全局变量存放在内存中的静态区,在该区的数据只有在程序全部执行完之后才会被释放。

    看上面的流程图2,x是全局变量,所以x放在了静态区里面,每次激活函数f( )后,输入的x的值会覆盖前一个x的值,当程序执行到第⑤步执行后,x的值并不会像程序1那样被系统回收,它会保留下来,当函数进入第三个框内的时候,输出的x依然是*,以此推下去。因此,程序会输出****。

    展开全文
  • 变量的作用域(全局变量和局部变量) 变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。...函数内要改变全局变量的值,使用global声明一下 局部变量 在函数体中(包含形...
  • # 全局和局部变量name="派森716" #全局变量-----》函数一开始就定义的变量def change(): """ 改变全局变量,改不了 :return: """ name="曹娜"#局部变量:----》函数内部定义的变量 print(name)# 打印局部变量name ...
  • 在函数块(或代码块)中,局部变量可用通过global关键字声明变量来改变在函数块(或代码块)之外对该变量做的操作。 在函数里面定义的global全局变量,最好不要在函数里面改全局变量全局变量 作用域为整个程序...
  • python中的局部变量and全局变量 局部变量:在某个函数内部定义,作用在函数内部。生命周期:从变量被创建开始到函数结束死亡。...如果要在函数内改变全局变量的话,只需要在函数内添加global关键字
  • 由于同一文件中的所有函数都能引用全局变量的值,因此如果在一个函数中改变全局变量的值,  就能影响到其他函数中全局变量的值,相当于各个函数之间有直接的传递渠道。  为了便于区别两者,C程序设计人..
  • 局部变量与全局变量 全局变量变量名全部大写,局部变量变量名全部小写 顶头写的觉全局变量 在子程序里面写的叫局部变量 无global的时候优先读取局部变量,且无法对... global name #加上这句将会改变全局变量的值 ...
  • (2)如果想在局部变量里边改变全局变量 加global 变量名 (3)内层函数想使用外层函数变量需用关键字nonlocal. ''' a = 100 def func(): a = 200 print(a) func() #猜猜输出的a是100还是200呢?结果为200...
  • 局部变量全局变量:定义及使用都与其他语言一样,局部变量在局部定义...(注:但是这种global方式一般不提倡使用,原因在于会出现不清楚在何地全局变量改变的情况)(2)除了字符串和数字的全局变量在子函数中不能...
  • 同一文件中的所有函数都能引用全局变量的值,所以如果在一个函数中改变全局变量的值,就能影响到其他函数中全局变量的值,相当于各个函数之间有直接的传递渠道。 为了区别全局变量局部变量:我们将全局变量名的...
  • [Sass]局部变量全局变量 Sass 中变量的作用域在过去几年已经发生了一些改变。直到最近,规则集和其他范围内声明变量的作用域才默认为本地。如果已经存在同名的全局变量,从3.4 版本开始,Sass 已经可以正确...
  • 在函数体内对全局变量重新赋值,不改变原来的全局变量的值 a = 1#全局变量 def func(): a= 2 #局部变量 print(a) func()#输出:2 print(a)#输出:1 将函数体内的局部变量声明为全局变量,在局部变量前加global ...
  • 全局变量+static => 作用域改变 局部变量 + static => 作用域不变,生命周期改变,存储方式改变
  • 变量与常量 ...局部变量:定义在函数中的变量。 全局变量 全局变量:定义在函数外面的变量。 #include<stdio.h> int g_a; //定义在函数外面叫全局变量 int main(void) { int a; ...
  • 本来以为 局部变量就是在函数/def/class/lambda内部的变量,全局变量就是在之前这些之外的变量。但是,再一次学习Python atm 中应用时发现了一次特例(意外) 字典中 在函数内部改变 其部分值之后,在函数外打印...
  • python中类的变量可分为类变量、成员变量和局部变量 class Demo(): classVar = 50 #类变量,类似静态变量,不同点,在实例中改变只影响本实例 def __init__(self,x) self.numberVar = x def fuc(self): ...
  • Python局部变量全局变量

    千次阅读 2015-03-14 22:16:20
    局部变量 你在函数定义中声明的变量,他们与在函数外使用的其它同名变量没有任何关系,即变量名称对函数来说是局部的。这叫变量的范围。所有变量都有它们被声明的块的... print('局部变量x改变为', x) func(x) prin
  • 局部变量全局变量

    2016-02-16 21:52:35
    全局变量:  在所有函数外部定义的变量,称为全局变量 #include int a;int add();int main(){ add(); add(); printf("%d\n",a); //运行结果:2 return 0;}int add(){ a++; return 0;} 用于存储一个需要长期存于...
  • 局部变量作用域在函数内部,函数执行结束,变量占用的内存会在垃圾回收机制中回收全局变量,作用域在整个类中项目中,使用前需要进行实例化,分配内存空间成员变量,定义在类中的变量静态变量,用statics修饰的变量...
  • 局部变量全局变量

    2014-01-16 16:55:00
    if、while中变量的作用域问题 我们知道,函数、类会改变当前变量的...在PHP中,if,while等分支循环结构中声明的局部变量,在分支循环结构后面仍然有效。 比如,函数中声明的变量在函数外面是不可见的 例一:my...
  • 全局变量就是动态代码所对应的类的一个属性,当执行jsp时便会为该类创建对象,为属性开辟空间,所以任何对该属性的改变都会保存在该类的对象中,那就是为什么jsp页面不管执行多少次,上一次对该全局变量执行的结果都...
  • 局部变量:作用域在函数内部,函数执行结束,变量占用的内存会在垃圾回收机制中回收 全局变量:作用域在整个类中项目中,使用前需要进行实例化,分配内存空间 成员变量:定义在类中的变量 静态变量:用statics修饰的变量...
  • Python函数中的局部变量全局变量

    千次阅读 2019-03-27 19:08:48
    局部变量 你在函数定义中声明的变量,他们与在函数外使用的其它同名变量没有任何关系,即变量名称对函数来说是局部的。这叫变量的范围。所有变量都有它们被声明的块的范围,从名称... print('局部变量x改变为',...
  • 理解:什么是局部变量,什么是全局变量 局部变量的定义:在局部范围内的变量;例子:天气预报:西安2019年7月19号今天阴天,在全国范围内,今天的天气...我定义了3个函数,a=3为全局变量,如果局部不改变a的值则a就...
  • str = "python 2.7" //全局变量 def test1(): str = "test_python" //局部变量 print(str) if __name__ == '__main__': test1()这个时候打印出来的是test_python 难道这个方法把全局变量改变了?我们再次做个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,598
精华内容 639
关键字:

局部变量改变全局变量