zoukankan      html  css  js  c++  java
  • javascript-作用域

    一:什么是作用域

      作用域指的是变量的适用范围

    二:JS的作用域与其他语言区别

      在其他语言中比如JAVA,C语言等是以块为作用域{}

       JS作用域是以函数做为作用域,python也是以函数为作用域。

      java中代码

      如下代码会直接报错,因为name没有定义,以块为作用域,及在if (){}中name是定义的,在 外面没有定义

        public void Func(){
            if (1==1){
            string name="java";
            }
            console.writeline(name) 
        }
        
        Func()     在其他语言的时候会报错(java,c等)

      python中,不会报错,因为他是以函数为作用域

    # -*- coding:utf-8 -*-
    __author__ = 'shisanjun'
    def func():
    if (1==1):
    name="java"

    print(name) #这里不会报错
    func
    print(name) #这里报错,没有定义

    ------------------------------

    Traceback (most recent call last):
    File "E:/python练习/day15/s1.py", line 9, in <module>
    print(name) #这里报错,没有定义
    NameError: name 'name' is not defined

    三:JS作用域特性

       1) JS作用域是以函数做为作用域
          2) 函数的作用域在函数未被调用之前,已经创建
          3)函数的作用域存在作用域链(函数嵌套函数),并且也是在被调用之前创建
          4) 函数内局部变量提前申明

    四:JS解释过程

        function func(){
            console.log(xx00);//只声明,没有付值
            var xx00="alex";
        }
        func()
        结果:undefined

      在解释的过程中会先找到内部的所有局部变量,并声明变量。所以上面代码解释后变成如下

        var xx00;
        function func(){
            console.log(xx00);//只声明,没有付值
            var xx00="alex";   //局部变量
        }
        func() //这里调用的时候是只有声明没有赋值,所以是undefinde
    
    

      function func(){
      console.log(xx00);

      }
      func()
      VM754:2 Uncaught ReferenceError: xx00 is not defined//直接报错了,没有定义变量
      at func (<anonymous>:2:21)
      at <anonymous>:5:5

     
        直接报错

    五:示例

      1)

        xo="alex"
    
        function func(){
            var xo="eric";
    
            function inner(){
    
                console.log(xo)
            }
            return inner //这里返回的是inner函数
        }
        
        var ret=func()
        ret()//第三点
        结果:eric

     

    2)

        xo="alex"
    
        function func(){
            var xo="eric";
    
            function inner(){
    
                console.log(xo)
            }
            var xo="tony" 上面的inner并没有执行,xo值就成了tony
            return inner //这里返回的是inner函数
        }
        
        var ret=func()
        ret()//第三点
    
        结果:tony

  • 相关阅读:
    linux环境下安装redis扩展
    LINUX环境下SVN安装与配置(利用钩子同步开发环境与测试环境)
    Linux环境下网卡配置
    MAC 下虚拟主机的配置
    从json_encode过来的的字符串被返回到html页面时的解析
    for循环绑定事件,闭包思想!
    js8月-4号,,思想
    三种添加事件的方式
    smarty第一天
    5秒钟后自动跳转!!!!
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/7617217.html
Copyright © 2011-2022 走看看