zoukankan      html  css  js  c++  java
  • JS 变量作用域

    摘自javascript权威指南 P57

    一个变量的作用域是程序源代码中定义这个变量的区域。

    局部变量:函数内声明的变量是局部变量,函数参数也是局部变量。

    全局变量:全局变量拥有全局作用域,在JavaScript代码中的任何地方都是有定义的。

    在函数体内,局部变量的优先级高于同名的全局变量。

    声明全局变量的代码时可以不写var,但声明局部变量必须使用var语句。

    如果在局部变量中不适用var,那么可能会改变了全局变量的值或者声明了一个全局变量。

    在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的,我们称为块级作用域,而javascript中没有块级作用域。javascript取而代之地使用了函数作用域,变量在声明他们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。

    function testScope(o)
            {
                var i = 0;
                if(typeof o == "object")
                {
                    var j = 10;
                    for(var k =0;k<10;k++)
                    {
                        //console.log(k);
                    }
                    console.log("K "+k);
                }
                console.log("j  "+j);
                a();
                function a()
                {
                    console.log("inner function K "+k);
                    console.log("inner function j  "+j);
                }
            }

    console 打印

     javascript的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的,这意味着变量在声明之前甚至已经可用。JavaScript这这个特性被非正式的称为声明提前,即JavaScript函数里声明的所有变量(但不涉及赋值)都被“提前”至函数体的顶部。

    var scope = "global";
    function f()
    {
        console.log(scope); // undefined 
        var scope = "local";
        console.log(scope); 
    }

    等同于

    var scope = "global";
    function f()
    {
        var scope;
        console.log(scope); // undefined
        scope = "local";
        console.log(scope); 
    }

    在具有块级作用域的编程语言中,在狭小的作用域里让变量声明和使用变量的代码尽可能靠近彼此,通常来讲,这是一个非常不错的编程习惯。由于JavaScript没有块级作用域,因此开发人员特意将变量声明放在函数体顶部,这种做法使得源码非常清晰的反应了真实的变量作用域。

  • 相关阅读:
    快捷键----------快人快语
    有趣的java小项目------猜拳游戏
    java随机数组
    if-else 循环嵌套结构
    java九九乘法表
    java内存基础(一)
    C语言入门级教程:基础数据类型与基本算法,学编程从此刻开始!
    今日份编程知识分享,C++的循环结构!
    摸鱼也要有技巧!3个 linux 命令行工具让你假装很忙....
    编程小白须知,阿里、百度、华为这些大厂都用什么编程语言?别说不知道!
  • 原文地址:https://www.cnblogs.com/alway-july/p/8409105.html
Copyright © 2011-2022 走看看