zoukankan      html  css  js  c++  java
  • js 词法作用域

    前言

    什么是作用域?

    作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
    

    白话文:作用域就是变量在哪块地方管用。

    词法作用域

    那么什么是词法作用域呢?

    词法作用域相对动态作用域而言,也可以说其为静态作用域。

    写过后台人员,我们一直写的c#或者java 或者c++,其实都是静态作用域。

    我们手写一个c#:

    public static string goodone = "10";
    static void Main(string[] args)
    {
    	string goodone = "50";
    	testMethod();
    	Console.ReadKey();
    }
    
    public static void testMethod()
    {
    	Console.WriteLine(goodone);
    }
    

    也就是说,我们在写好函数的时候,调用上面goodone的时候,就已经知道调用到那个变量,而不会改变。

    javascript 同样也是静态作用域。

    var scope = "global scope";
    function checkscope(){
        var scope = "local scope";
        function f(){
            return scope;
        }
        return f();
    }
    checkscope();
    
    var scope = "global scope";
    function checkscope(){
        var scope = "local scope";
        function f(){
            return scope;
        }
        return f;
    }
    checkscope()();
    

    上面打印出来的都是local scope,因为f函数在创建的时候就已经确定了scope调用的变量。

    JavaScript 函数的执行用到了作用域链,这个作用域链是在函数定义的时候创建的。
    嵌套的函数 f() 定义在这个作用域链里,其中的变量 scope 一定是局部变量,不管何时何地执行函数 f(),这种绑定在执行 f() 时依然有效。
    

    动态作用域

    我们用linux的时候,编写bash脚本的时候。或者windows,shell,这些都是动态的。

    我在网上找了一个bash的例子。

    value=1
    function func() {
        echo $value;
    }
    function func2 () {
        local value=2;
        func;
    }
    func2 
    

    输出的是2,因为是动态的,$value编写的时候并没有确定是哪个变量。

    总结

    这个理解this非常重要。

  • 相关阅读:
    C open fopen read fread
    图像混合模式算法
    高级API和低级API
    strcpy_s与strcpy
    IsPowerOfTwo
    透明度算法
    POJ 2240(bellman_ford)
    POJ 1797(dijkstra)
    【转载】POJ 图论题目列表
    POJ 1502(Floyd)
  • 原文地址:https://www.cnblogs.com/aoximin/p/12752246.html
Copyright © 2011-2022 走看看