精华内容
下载资源
问答
  • 以前错误的认为,全局变量名、局部变量名和形参名相同时,全局变量(也就是外部变量)被形参覆盖,形参被局部变量覆盖。 今天发现这样理解并不对。比如 function foo(num){ var num; console.log(num); } ...

    以前错误的认为,全局变量名、局部变量名和形参名相同时,全局变量(也就是外部变量)被形参覆盖,形参被局部变量覆盖。

    今天发现这样理解并不对。比如

    function foo(num){
      var num;
      console.log(num);  
    }
    foo(1)   //  1
    
    //如果错误的理解为局部变量会覆盖形参的话,会认为会输出undefined

    那事实是什么呢。实际上变量名冲突分两种,一种是函数外的变量和函数里的局部变量的冲突,一种是函数内部的冲突。

    第一种冲突,我把它理解为是作用域链的上游(最上游是全局对象的命名空间)会被下游函数的局部变量覆盖。

    其实我觉得这就是一种继承关系,好比原型链里离目标对象近的新的方法覆盖远的旧的方法,甚至是好比HTML/CSS里字体、颜色等属性的继承。

    只不过这里继承的是一个上下文环境。

    它们都有一个特点,自己有,用自己的;自己没有,用父级的;父级没有,再逐级向上。

    //和HTML/CSS属性继承不同的是,JS作用域链还涉及变量/函数声明
    
    //简单说,就是子元素一旦声明了变量,不管有没有赋值,都算做是有自己的了
    //也就不会操作到父级了
    
    var b;
    function foo2() {
        console.log(b);
        var b;
    }
    foo2();//undefined

    第二中是函数内部的冲突,即同一作用域内的冲突。

    形参和局部变量其实就是同一作用域的。只不过JS里的形参省略了声明(像是Java就需要和变量一样做类型声明)。

    而在JS里有:同一作用域,重复申明但不赋值,不会对变量有影响

    var a=1;
    console.log(a);  //1
    var a;
    console.log(a);  //1

    这也就解释了,为什么局部变量申明但不赋值,不影响形参。

    或许你会有我之前的另一种猜测,局部变量声明但不赋值,不会覆盖形参,但赋值了不是改变形参,而是覆盖。

    那我们再看看这个

    var b;
    function foo2(b) {
        var b=2;
        console.log(b);
        console.log(arguments[0]);
    }
    foo2(1);
    
    //假如是局部变量名覆盖形参名的话,那应该打印'2 1'
    //而事实是'2 2'
    //所以其实局部变量和形参冲突,就是重复定义个变量
    //所以我觉得其实可以把形参理解为一个特殊的局部变量
    //只不过它在函数定义时被申明,而且申明的var 被省略
    function foo2(var b){
    }

     

    转载于:https://www.cnblogs.com/liyan-web/p/5911295.html

    展开全文
  • Java 成员变量与局部变量名重复

    千次阅读 2015-08-17 09:45:27
    Java 中成员变量和局部变量可以重复定义。

    一直以为 Java 的变量是不可以重复定义的,其实这种看法比较片面,成员变量和局部变量名是可以重复的


    在一个作用域时确实不可以重复定义,但是一个成员变量定义后,如果再定义一个局部变量,例如块,方法,可以定义重名的属性,这时候如果代码中调用到对应的变量名,默认胡找最近的“变量定义”,所以这个时候可以认为成员变量被屏蔽。


    如果想调用成员变量,对于实例变量,可以使用“this”关键字调用并加以区分;如果是静态变量,前面加上类名即可。


    所以在编写代码应该通过如上的两种调用方法加以区分,提高代码可读性。

    展开全文
  • 1.可变类型与不可变类型 可变类型,值可以改变: 列表 list 字典 dict 不可变类型,值不可以改变: 数值类型 int, long, bool, float 字符串 str ...在函数外边定义的变量叫做全局变量 全局变量...

    1.可变类型与不可变类型

    可变类型,值可以改变:

    • 列表 list
    • 字典 dict

    不可变类型,值不可以改变:

    • 数值类型 int, long, bool, float
    • 字符串 str
    • 元组 tuple

    看如下代码:

    2.修改全局变量

    既然全局变量,就是能够在所以的函数中进行使用,那么可否进行修改呢?

    代码如下:

    3.总结1:

    • 在函数外边定义的变量叫做全局变量
    • 全局变量能够在所有的函数中进行访问
    • 如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错
    • 如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的

    4.可变类型的全局变量

    >>> a = 1
    >>> def f():
    ...     a += 1
    ...     print a
    ...
    >>> f()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 2, in f
    UnboundLocalError: local variable 'a' referenced before assignment
    >>>
    >>>
    >>> li = [1,]
    >>> def f2():
    ...     li.append(1)
    ...     print li
    ...
    >>> f2()
    [1, 1]
    >>> li
    [1, 1]
    

    5.总结2:

    • 在函数中不使用global声明全局变量时不能修改全局变量的本质是不能修改全局变量的指向,即不能将全局变量指向新的数据。
    • 对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量。
    • 对于可变类型的全局变量来说,因其指向的数据可以修改,所以不使用global时也可修改全局变量。
    展开全文
  • An error occurred at line: 18 in ...换个变量名就可以了 原因找出来了 是因为我在当前这个jsp页面includ了另外一个jsp页面 而那个jsp页面已经定义了一个变量user 故在当前页面在定义user变量会报错
    An error occurred at line: 18 in the jsp file: /control/tab/tab_AppSpeck.jsp
    Duplicate local variable user
    15:     response.setContentType("text/xml;charset=UTF-8");
    16:     String sid = (String)session.getId();
    17:     System.out.println(" sid " + sid );
    18:     User user = (User) session.getAttribute(session.getId());
    19:     System.out.println( (User)session.getAttribute(session.getId()));
    20:     String confID = (String)request.getParameter("confID");
    21:     String action = (String)request.getParameter("action");


    An error occurred at line: 25 in the jsp file: /control/tab/tab_AppSpeck.jsp
    userte cannot be resolved
    22:     System.out.println(" confid " + confID );
    23:     System.out.println(" action " + action );
    24:     
    25:      String str = ConHelper.appSpeck(confID, userte);
    26:      response.getWriter().write(str);
    27:     
    28:


    Stacktrace:
        at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
        at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
        at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:321)
        at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Unknown Source)


    Duplicate local variable user是说重复的局部变量

      只要把那个 User usertest = (User) session.getAttribute(session.getId());换个变量名就可以了

    
    原因找出来了  是因为我在当前这个jsp页面includ了另外一个jsp页面 而那个jsp页面已经定义了一个变量user 故在当前页面在定义user变量会报错


    展开全文
  • SQL局部变量

    千次阅读 2017-02-24 16:16:31
    DECLARE 局部变量名 数据类型 【后面可以用逗号连接n个】 局部变量名必须是以@开头,要符合标识符的命名规则。 2.局部变量的赋值: 用SET或SELECT语句为局部变量赋值。 SET 局部变量名=表达式 SELECT 局部变量名=...
  • python的 局部变量和全局变量

    万次阅读 2017-07-31 19:12:06
    函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义了一个局部变量,不管全局域中有没有该变量名,函数中使用的将是局部变量。(即声明了一个新的局部变量。如果这个变量名字和全部变量名字相同,那么局部...
  • python的局部变量和全局变量区别

    千次阅读 2018-01-16 15:37:59
    1.函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义了一个局部变量,不管全局域中有没有该变量名,函数中使用的将是局部变量。 (即声明了一个新的局部变量。如果这个变量名字和全部变量名字相同,...
  • python中全局变量与局部变量

    万次阅读 多人点赞 2019-03-01 15:27:17
    python中全局变量与局部变量 标签: python 局部变量就是定义在一个函数体内部的变量 全局变量是定义在外面的变量 比如: a = 1 def f(): b = 2 其中a就是全局变量,而b是局部变量局部变量只在函数体内部...
  • c语言局部变量默认初始值

    千次阅读 多人点赞 2018-04-09 15:29:48
    定义局部变量,其实就是在栈中通过移动栈指针来给程序提供一个内存空间和这个局部变量名绑定。因为这段内存空间在栈上,而栈内存是反复使用的(脏的,上次用完没清零的),所以说使用栈来实现的局部变量定义时如果不...
  • Lua全局变量与局部变量

    千次阅读 2019-04-22 16:55:52
    在lua中,局部变量变量名前加 local)与全局变量类似于C语言中的概念: print(a) --打印变量nil a=111 --全局变量(整个lua文件中都可以使用,向下的范围) do local a=0--局部变量在语句块的结束 a=1 ...
  • 新手小白学 JAVA 方法 局部变量 成员变量

    万次阅读 多人点赞 2021-04-01 23:59:30
    一般通过“变量类型 变量名 = 变量值 ;”这三部分来描述一个变量。如:int a = 3 ; 变量的使用原则:就近原则,即尽量控制变量的使用范围到最小 2.2 局部变量 位置:定义在方法里或者局部代码块中 注意:必须手动初始化...
  •   基本概念: 作用域:起作用的区域,也就是可以工作的范围。...C语言中局部变量就分配在栈中。   局部变量  普通的局部变量定义的时候直接定义或者在前面加上auto void func1(void){&nbs...
  • 关于java成员变量和局部变量

    万次阅读 多人点赞 2018-09-14 10:46:45
    1、成员变量和局部变量简述 在Java语言里,根据定义变量位置的不同,可以将变量分成两大类:成员变量(存在于堆内存中,和类一起创建)和局部变量(存在于栈内存中,当方法执行完成,让出内存,让其他方法来使用内存)...
  • 成员变量和局部变量同名 在同一个作用域内不允许定义同名的多个变量。   在一个方法内,可以定义和成员变量同名的局部变量或参数,此时成员变量被屏蔽。此时如果想要访问成员变量,可以通过 this 关键字来...
  • 1、局部变量能否和全局变量重名?  答:能,局部会屏蔽全局。要用全局变量,需要使用 ":: "  局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器...
  • 形参、局部变量和静态局部变量的差别  从本质上说,三者均属于局部作用域中的变量,其中局部变量又可以分为普通(非静态)局部变量和静态局部变量。它们的差别: 作用域:形参的作用域为整个函数体;而普通(非...
  • 定义在函数内的变量有局部作用域,在一个模块中最高级别的变量有全局作用域。本文主要讲述全局变量、局部变量和导入...在那一刻,一个新的局部变量名为那个对象创建了,一旦函数完成,框架被释放,变量将会离开作用域。
  • 全局变量局部变量静态全局变量、静态局部变量的区别   转自:http://hi.baidu.com/sindana/blog/item/06fe68171e364401c93d6ded.html 标签:全局变量 局部变量 静态全局变量 静态局部变量 ...
  • 写好构造函数,或者方法。 new String() 方法1:鼠标光标在上面,...出现的三个选项,一个是批量修改变量名,一个是快速生成局部变量,一个快捷生成全局变量。 方法2 :写好方法之后,光标在最后面,shift+alt+L ...
  • 1. 局部变量和全局变量是不同的变量,即使变量名相同 局部变量是函数中的占位符,与全局变量可能重名,但不是同一个变量 函数运行结束后,局部变量被释放 可以使用global保留字在函数中使用全局变量 看下面两个...
  • 局部变量和全局变量的初始化

    千次阅读 2018-05-15 09:09:41
    定义局部变量,其实就是在栈中通过移动栈指针来给程序提供一个内存空间和这个局部变量名绑定。因为这段内存空间在栈上,而栈内存是反复使用的(脏的,上次用完没清零的),所以说使用栈来实现的局部变量定义时如果不...
  • 如果ruby中一个局部变量名和私有方法名同名的话,默认只能
  • 全局变量局部变量静态全局变量、静态局部变量的区别转自:http://hi.baidu.com/sindana/blog/item/06fe68171e364401c93d6ded.html 标签:全局变量 局部变量 静态全局变量 静态局部变量 it ...
  • python3 全局变量和局部变量

    万次阅读 2018-08-10 14:37:56
    全局变量和局部变量 局部变量: 1.定义在函数内部的变量称为局部变量(函数的形参也是局部变量) 2.局部变量只能在函数内部使用 3.局部变量在函数调用时才能够被创建,在函数调用之后会自动销毁 全局变量: 1.定义...
  • python局部变量

    2018-07-01 21:42:21
    局部变量如下所示:总结:局部变量,就是在函数内部定义的变量其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的因为其作用范围只是在自己的函数内部,所以不同的函数可以定义相同名字的...
  • 局部变量 全局变量 函数的嵌套

    千次阅读 2018-07-14 07:47:22
    day10笔记:局部变量: 1. 定义在函数内部的变量称为局部变量(函数的形参也是局部变量) 2. 局部变量只能在函数内部使用 3. 局部变量在函数调用时才能够被创建,在函数调用结束之后会自动销毁全局变量: 1. 定义在...
  • 如果java的成员变量和局部变量重名 JAVA会用局部变量覆盖掉成员 只看楼主 收藏 回复 iehshx 淼沝 5 怎么样才能让两个变量都输出呢...
  • 对于有些编译器而言,在同一个函数内可以定义多个同 局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。   2、如何引用一个已经定义过的全局变量?
  • 我们知道lua脚本语言的变量是弱类型的,即变量没有类型,值才有类型,同一名称的变量具体类型要看所赋值的类型,如下 ...全局变量和局部变量,类似于shell脚本 全局变量:顾名思义,其生命有效期是全局的,整个lua
  • 静态局部变量

    千次阅读 2015-11-04 15:44:22
    静态局部变量局部变量前,加上关键字static,该变量就被定义成为一个静态局部变量。 我们先举一个静态局部变量的例子,如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 397,575
精华内容 159,030
关键字:

局部变量名