首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JS作用域

    JavaScript的作用域有全局作用域和局部作用域 先通过一下代码来体验下作用域 var x = 1; function f1(){ var y = 2; x = 10; console.log...​ 3-2)输出局部变量a,因为a未赋值,所以这个地方输出undefined ​ 3-3)给局部变量a赋值为3 4)输出全局变量a,a的值为1 这就是上面这段代码的预解析过程,只要把这段代码的预解析搞明白了...不管怎样我们来对上述代码进行一下预解析, 1)定义全局变量a 2)定义全局函数f1 3)给全局变量a赋值为10 4)运行f1 4-1)定义局部变量b,当前b的值为undefined 4-2)定义局部变量...a,当前a的值为undefined 4-3)定义局部变量c,当前c的值为undefined 4-4)给局部变量b进行赋值,使用2*a表达式的结果进行赋值,由于a的值为undefined,...所以b的值为NaN(Not a Number) 4-5)给局部变量a赋值为20 4-6)给局部变量c进行赋值,使用a+1表达式的结果进行赋值,由于上一步局部变量a的值为20,所以a+1的表达式的值为

    1.8K10

    什么是js的解构赋值

    这种语法提供了一种更加简洁的方式来从数组或对象中提取数据,并赋值给不同的变量。 优点和缺点 解构赋值的优点和缺点主要取决于具体的使用场景和上下文。...以下是解构赋值的一些主要优点和缺点: 优点: 代码简洁性:解构赋值允许我们在一个语句中从数组或对象中提取多个值,并将其分配给不同的变量。这大大减少了代码量,并使代码更加简洁易读。...使用示例 数组解构赋值 在数组中,解构赋值允许我们直接将数组中的元素赋值给不同的变量。...在对象中,解构赋值允许我们提取对象的属性值,并将它们赋值给对应的变量。...,当被解构的变量不存在或者其值为undefined时,可以指定一个默认值。

    1.4K10

    JS作用域和作用域链

    JS中的作用域就是在一定的空间范围内对数据进行读写操作。 在JS中一个变量的作用域(scope)是程序中定义这个变量的区域。 变量有全局变量和局部变量两种。...此外还要注意一下几点: 单线程 同步执行 唯一的全局执行环境 局部执行环境的个数没有限制 每次某个函数被调用,就会有个新的局部执行环境为其创建,即使是多次调用的自身函数(即一个函数被调用多次,也会创建多个不同的局部执行环境...搜索过程始终从作用域链的前端开始,然后逐级地向后(全局执行环境)回溯,直到找到标识符为止。 此外还要讲下JS作用域中的块级作用域。 JS中是没有块级作用域这个概念的。 什么是块级作用域呢?...但JS由于没有块级作用域,所以在块外仍旧可以访问。...JS并不支持块级作用域,它只支持函数作用域,而且在一个函数中的任何位置定义的变量在该函数中的任何地方都是可见的。 那么JS又该怎么拥有块级作用域呢?

    5.8K30

    JS基础——作用域、作用域链

    作用域 [[scope]],函数定义时自动生成的一个隐式属性,是用来存储函数作用域链 Scope Chain的容器。作用域链是用来存储函数执行上下文 AO和全局执行上下文 GO的容器。...函数被定义时,系统会为函数生成[[scope]],[[scope]]中保存该函数的作用域链,并从该作用域链的起始位置开始存储当前环境的作用域链。...函数被定义后&将要执行前会生成函数本身的AO,并将其插入作用域链的起始位置。...,并将GO插入到作用域链的起始位置。...函数a被执行时,此时函数b也被定义,函数b的[[scope]]也在此时生成,其中存储函数b的作用域链,并将当前环境的作用域链插入函数b作用域链的起始位置,即函数a的AO和GO。

    4.7K10

    原生JS | 作用域

    全局变量 在window环境下声明的变量,或者可以理解为非函数内声明的变量,称为全局变量。全局变量存在于整个JavaScript当中,在任何地方都能被访问和修改。...如果window下也不存在该空间,会在全局作用域之下进行空间的创建。 作用域链 由于在全局作用域当中会包含局部作用域,局部作用域当中还可以再包含局部作用域。...当有多层作用域时,深层的作用域中查找变量时,会按照“当前作用域”到“上层作用域”再到“全局作用域”的顺序进行查找,这个查找的顺序就可以理解为作用域链。...) user是创建在function中的变量,为局部变量。...在全局作用域中也没有user这个存储空间,此时在全局作用域当中创建user这个存储空间,并将'码匠'赋值给这个存储空间。

    6.5K50

    js作用域详解

    js对象 众所周知,js的所有数据类型都是一个对象,例如: var a = 1; console.log 声明a=1;a属于number类型,但是number类型又是number对象,有着以下方法: interface...总结 1:js万物皆对象,所有变量都是对象类型。...2:js的作用域是往下通用的,下层作用域可访问上层作用域的变量,并可修改值 3:js下层作用域变量和上层同名冲突时,下层作用域将覆盖上层变量,但上层作用域的访问不受影响 4:不适用var方法定义的变量,...8:闭包函数可通过赋值方法调用 9:闭包函数加括号 赋值到变量中,该变量将等于闭包的返回值 10:闭包返回值可返回一个对象,后期可使用  闭包赋值变量名.对象属性方法进行访问 11:闭包函数类var...this.变量名,方式应用 本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn 上一篇:

    3.5K10

    JS进阶-作用域

    全局作用域的变量会成为 window(浏览器环境)或 global(Node.js 环境)对象的属性。 在任何地方(函数、代码块等)都可以访问全局变量。...作用域链 定义:作用域链是js中的变量查找机制! 是一个查找机制!!指的是当一个变量在当前作用域找不到时,js会沿着作用域的层级结构向上查找,直到找到该变量或到达全局作用域。...局部的名字"; // 局部变量遮蔽了全局变量 console.log(name); // "局部的名字" } sayName(); console.log(name); // "全局的名字" JS...'); }, 1000); window.addEventListener('scroll', handleScroll); 变量提升&&函数提升 变量提升的话就是var声明的变量,会被前置,但是未赋值...函数声明在文件地方,都会被提升到全局,也就是说可以在头部先使用,然后后面再定义 fn() function fn(){ console.log('函数提升') } 但是下面这种声明方法不能提前,下面这种是赋值声明

    1.1K10
    领券