zoukankan      html  css  js  c++  java
  • 谈谈javascript的函数作用域

     在一些类似c语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明他们的代码段之外是不可见的,我们称为块级作用域(block scope),而javascript中没有块级作用域。取而代之的javascript使用的是函数作用域(function scope):变量在声明它的函数体以及这个函数体嵌套的任意函数体内都是有定义的。 在如下代码中,在不同位置定义的i,j和k,他们再同一个作用域内都是有定义的

    function text(o)   
    {   
        var i=0;   
        alert(typeof o);   
        if(typeof o == "string")   
        {   
            var j=0;   
            for(var k=0;k<10;k++)   
            {   
                alert(k);//输出0-9   
            }   
            alert(k);//输出10   
        }   
        alert(j);//输出0   
    }   
       

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

    var global="globas";   
    function globals()   
    {   
        alert(global);//undefined   
        var global="hello QDao";   
        alert(global);//hello QDao   
    }  

    由于函数作用域的特性,局部变量在整个函数体始终是有定义的,也就是说在函数体内部变量遮盖了同名的全局变量。尽管如此在程序执行到var语句的时候,局部变量才会被真正的赋值,因此,上述过程等价于:将函数内的变量声明“提前”至函数体顶部,同事变量初始化留在原来的位置:

    var global="globas";   
    function globals()   
    {   
      
           var global;   
        alert(global);//undefined   
        global="hello QDao";   
        alert(global);//hello QDao   
    }  
  • 相关阅读:
    关于Web 打印的三种方法
    禁止另存为 禁止复制 禁止右键 JS
    无限数据递归
    VS2003+Ajax Div文本框输入提示
    C#关于日期月天数和一年有多少周及某年某周时间段的计算
    git代码冲突
    RabbitMQ死信队列
    Elementui:ElContainer布局
    mxml调用as
    用自己的MapServer,解决沙箱冲突
  • 原文地址:https://www.cnblogs.com/ranzige/p/javscript_function.html
Copyright © 2011-2022 走看看