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

  • 相关阅读:
    DevExpress XtraReport报表预览时可编辑的功能
    vim编辑器的常用命令
    git 的一些常用命令
    ASP.NET MVC过滤器粗略总结
    违法占耕辅助处理软件
    三调管理信息系统
    java学习随笔源码day01
    Java学习笔记Day01-004之static关键字
    人事工资信息管理系统(核心代码实现、操作视频)
    人事工资信息管理系统之数据库设计
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/7617217.html
Copyright © 2011-2022 走看看