博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 作用域
阅读量:5166 次
发布时间:2019-06-13

本文共 1134 字,大约阅读时间需要 3 分钟。

前言:

​ 这是每天看github上面的一位大佬 [的博客 自己加以自己的理解总结的

作用域 是指程序源码中定义变量的区域

作用域决定了如何查找变量,也就是度额定当前执行代码对变量的访问权限

JavaScript 使用的是 词法作用域 (lexical scoping) 也就是静态作用域

静态作用域与动态作用域

因为JavaScript采用的是词法作用域,函数的作用域在函数定义的时候就决定了

而与词法作用域相对的是动态作用域

函数的作用域是在函数被调用的时候决定的

var value = 1;function foo() {    console.log(value);}function bar() {    var value = 2;    foo();}bar();//这里打印的是什么 1? 2?

静态作用域:

​ 执行 foo()函数内部作用域找value 找不到 在全局变量里面找 找到了 打印出 1

动态作用域

​ 执行 foo() 函数内部作用域找value 找不到 进入调用函数(bar)作用域 找到了value 打印 2

因为js是静态作用域所以这里是1

这里参照《JavaScript权威指南》 P183

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

假如理解了JavaScript的静态作用域 可以很轻易的判断出 这里打印的是 '局部变量' local scope

那么这里我们返回函数内嵌套的一个函数对象 而不是直接返回结果

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

依旧是 "local scope"

JavaScript函数的执行用到了作用域链,这个作用域链是函数定义的时候创建,嵌套的函数f()定义在这个作用域链上面,里面的变量scope一定是局部变量,,不管什么情况下执行f() 局部变量的绑定依旧有效,,因此打印出来依旧是

local scope

下一篇会以执行上下文来解读这段代码 究竟在运行上面什么地方不相同

转载于:https://www.cnblogs.com/wuvkcyan/p/8965144.html

你可能感兴趣的文章
静态库制作-混编(工程是oc为基础)
查看>>
jQuery 显示加载更多
查看>>
代理模式
查看>>
Confluence 6 系统运行信息中的 JVM 内存使用情况
查看>>
Confluence 6 升级以后
查看>>
用JS实现版面拖拽效果
查看>>
二丶CSS
查看>>
《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
查看>>
JS一些概念知识及参考链接
查看>>
TCP/IP协议原理与应用笔记24:网际协议(IP)之 IP协议的简介
查看>>
SAP HANA开发中常见问题- 基于SAP HANA平台的多团队产品研发
查看>>
游戏中的心理学(一):认知失调有前提条件
查看>>
WHAT I READ FOR DEEP-LEARNING
查看>>
【Ruby】Ruby在Windows上的安装
查看>>
Objective C 总结(十一):KVC
查看>>
BZOJ 3747 洛谷 3582 [POI2015]Kinoman
查看>>
vue实战(7):完整开发登录页面(一)
查看>>
Visual Studio自定义模板(二)
查看>>
【Mood-20】滴滤咖啡做法 IT工程师加班必备 更健康的coffee 项目经理加班密鉴
查看>>
读《构建之法-软件工程》第四章有感
查看>>