js 作用域和作用域链

一、作用域

  在 Javascript 中,作用域分为 全局作用域 和 函数作用域

  全局作用域:

    代码在程序的任何地方都能被访问,window 对象的内置属性都拥有全局作用域。

  函数作用域:

    在固定的代码片段才能被访问

  

  例子:

    

    作用域有上下级关系,上下级关系的确定就看函数是在哪个作用域下创建的。如上,fn作用域下创建了bar函数,那么“fn作用域”就是“bar作用域”的上级。

    作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。

    变量取值:到创建 这个变量 的函数的作用域中取值

 

二、作用域链

  一般情况下,变量取值到 创建 这个变量 的函数的作用域中取值。

  但是如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这么一个查找过程形成的链条就叫做作用域链。

var x = 10;

function fn(){
    console.log(x);
}

function show(f){
    var x = 20;
    (function(){
       f();    // 10
    })()
}

show(fn);

  

(0)

相关推荐

  • JavaScript——函数

    一.函数的定义与调用(与python类同)  // 无参函数 function f1() { console.log("Hello world!"); }; f1(); // 有参 ...

  • 用一个例子理解JS函数的底层处理机制

    个人笔记,如有错误烦请指正 以下面代码的运行举例,一行行进行运行的解析 var x = [12, 23]; function fn(y) { y[0] = 100; y = [100]; y[1] = ...

  • 深入理解JavaScript作用域和作用域链

    目录 前言 作用域(Scope) 1.什么是作用域 2.全局作用域和函数作用域 3.块级作用域 作用域链 1.什么是自由变量 2.什么是作用域链 3.关于自由变量的取值 作用域与执行上下文 解释阶段: ...

  • JavaScript 基础二

    函数 函数:函数就是封装了一段可以重复执行的代码块. function fn(){ console.log('我是函数') } fn(); function getSum(a,b){ return a ...

  • javascript执行上下文、作用域与闭包(第六篇)

    终于讲到闭包了,当你在百度上搜索闭包时,你会被搜索出来的结果吓一跳,我的天,为什么说得都不一样?直到把所有的解释都看过了,我就只想说一句,到底谁说的是对的- 在这么多的不同解释里,我认真思考了很久,到 ...

  • 最详尽的 JS 原型与原型链终极详解

    最详尽的 JS 原型与原型链终极详解 一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是 JS 自带的函数 ...

  • [js] 第106天 说说你对作用域链的理解

    今日试题: 说说你对作用域链的理解 此开源项目四大宗旨:勤思考,多动手,善总结,能坚持 <论语>,曾子曰:"吾日三省吾身"(我每天多次反省自己). 前端面试每日3+1, ...

  • C++的标识符的作用域与可见性

    下面是关于C++的标识符的作用域与可见性学习记录,仅供参考 标识符的作用域与可见性 作用域是一个标识符在程序正文中有效的区域. 作用域分类 ①函数原型作用域 ②局部作用域(快作用域) ③类作用域 ④文 ...

  • [js] 第108天 请描述下js的原型和原型链的理解以及它们之间的关系

    今日试题: 请描述下js的原型和原型链的理解以及它们之间的关系 此开源项目四大宗旨:勤思考,多动手,善总结,能坚持 <论语>,曾子曰:"吾日三省吾身"(我每天多次反省自 ...

  • 终于弄明白了 Singleton,Transient,Scoped 的作用域是如何实现的

    一:背景 1. 讲故事 前几天有位朋友让我有时间分析一下 aspnetcore 中为什么向 ServiceCollection 中注入的 Class 可以做到 Singleton,Transient, ...

  • 什么是JavaScript的作用域

    作用域的概念 现代编程语言的最基本功能之一就是能够存储变量当中的值,以便于之后的使用于修改.也正是这个功能将状态带给了程序. 在JavaScript中,作用域就是一套设计良好的规则来存储变量. 简述编 ...

  • Python 变量作用域 LEGB (下)

    上篇:Python 变量作用域 LEGB (上)-- Local,Global,Builtin https://www.cnblogs.com/yvivid/p/python_LEGB_1.html ...

  • SpringBean作用域

    在配置文件中,除了可以定义Bean的属性值和相互之间的依赖关系,还可以声明Bean的作用域.例如,如果每次获取Bean时,都需要一个Bean实例,那么应该将Bean的scope属性定义为prototy ...