您的位置:

js代码作用域解析(js 作用域作用域链)

js代码作用域解析(js 作用域作用域链)

更新:

本文目录一览:

JavaScript作用域问题!

setInterval 具有异步的作用 它会等到最后再执行 这个时候i = 3了,es6 可以用let定义变量i 或者用立即执行函数包下setInterval 也可以解决

javascript this作用域详解

如果从js 底层语法来讲,this 指的是当前对象的prototype.

即如果你调用的是一个方法:

function fun(){

this.val = "";

}

fun();

那么这里的this 指的就是fun这个方法对象的prototype 通俗来讲就是方法对象

如果是给你个Html的Button注册的时间方法,那么只想的是这个button.

所以this所指向的对象其实是可以动态改变的,并不是一成不变,1楼的回答只是浏览器的默认Prototype。

js中setInterval与作用域

setInterval()的第一个参数如果是字符串,这个字符串中的代码就是在全局环境中执行的,作用域固定是全局作用域window

只有第一个参数是函数时,才能有函数创建时所在的作用域。

setInterval(function(){fun()},1000);

js全局和局部的作用域

楼下说的不对吧!

首先:第一个,第一行定义了一个全局的var01,再在方法里定义了一个var01,首先搞清楚什么是var ,这是个变量声明关键字,他出现在哪和你全局不全局没有任何关系!

第一个之所以undefind是因为你将一个变量名定义两次,这个是不允许的,undefind在这里本质是声明错误,内存中不存在,即声明时发生错误,内存没有记录!不存在的东西js统一报错undefind!

第二个:输出1,是因为,js是脚本语言,在执行时按照顺序加载,当执行到write时,var01的值是1,此时还没执行到var01=0,这一步,所以先到先得,取出为1,然后在将var01赋值为0,但是此前js就已经输出了,所以0不会被输出!

关于全局和非全局,等你做久了你其实会发现,把全局叫做作用域会更好,他作用于谁,取决于你在何处声明(var关键字),比如你在页面的js第一行就写一个var var01,那这个var01就只作用于这个页面,那我是不是可以理解,所谓全局是整个程序,那我虽然定义了一个var,却不能延伸到整个程序,那我是不是就可以推翻这个var看起来像全局,但在我的语境中其实并非全局,他只是我这个页面的全局,对于我整个程序来说,这个页面又是个局部!所以用作用域来解释会更好!

如果确实需要区分的话,那你可以这样理解

根据js 的执行顺序是逐行执行的特点,那么在js中,首先出现的var就是全局(顺带一提,function某种程度上等同var,再此与var并论!)所以简单理解就是,方法体外的var都是这个js的全局,方法体内的都是这个方法体的全局(你没听错,是这个方法体的全局!!!!!),但是,方法体是js 的全局,方法体内的var是方法的全局,而var var01的作用域又限定为方法体,所以,方法体内的var相对于js来说只能是局部.

其实这还漏了一个知识点:叫做,方法私有属性,即:方法体内定义的任何属性和方法都只归其父方法所有!!!!!

理解:某个页面的js文件理解为一个大方法,这个方法里又有其他方法,而子方法里的属性因为只归其父,所以父方法的父方法无权调用,父父方法若要调用只有通知其子方法,让子方法通知其子属性并暴露给其父父方法!

但愿你听懂了,哈利路亚!自己都绕了

什么是js作用域

执行环境(execution context,为简单起见,有时也称为“环境”)是 JavaScript 中最为重要的一个概 念。执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有一个 与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中。虽然我们 编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它。 全局执行环境是最外围的一个执行环境。根据 ECMAScript 实现所在的宿主环境不同,表示执行环 境的对象也不一样。在 Web 浏览器中,全局执行环境被认为是 window 对象(第 7 章将详细讨论),因 此所有全局变量和函数都是作为 window 对象的属性和方法创建的。某个执行环境中的所有代码执行完 毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁(全局执行环境直到应用程序退 出——例如关闭网页或浏览器——时才会被销毁)。 每个函数都有自己的执行环境。当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。 而在函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境。ECMAScript 程序中的执行流 正是由这个方便的机制控制着。 当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain)。作用域链的用途,是 保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终都是当前执行的代码所 在环境的变量对象。如果这个环境是函数,则将其活动对象(activation object)作为变量对象。活动对 象在最开始时只包含一个变量,即 arguments 对象(这个对象在全局环境中是不存在的)。作用域链中 的下一个变量对象来自包含(外部)环境,而再下一个变量对象则来自下一个包含环境。这样,一直延 续到全局执行环境;全局执行环境的变量对象始终都是作用域链中的最后一个对象。

js代码作用域解析(js 作用域作用域链)

本文目录一览: 1、JavaScript作用域问题! 2、javascript this作用域详解 3、js中setInterval与作用域 4、js全局和局部的作用域 5、什么是js作用域 Java

2023-12-08
js作用域实例,js 作用域作用域链

2022-11-25
js跨域读写cookie,JavaScript 跨域

本文目录一览: 1、如何用js实现跨域获取cookie 2、怎么用js跨域读到iframe里的cookie 3、js能读取跨域的cookie吗 4、js控制cookie跨域 5、js本地能写入别的域名

2023-12-08
作用域和作用域链详解

2023-05-19
js跨域问题解决的详细代码,js跨域问题怎么解决

本文目录一览: 1、跨域问题解决方法 2、js 跨域该如何解决 3、怎么解决跨域问题 4、如何解决js跨域问题 跨域问题解决方法 跨域?他是浏览器的 同源策略 造成的,是浏览器对javascript施

2023-12-08
js获取网页域名,js获取当前url域名

本文目录一览: 1、两种js获取当前域名代码 2、用JS获取当前域名并判断 3、如何使用Javascript获取一个链接地址中的顶级域名 4、如何通过js获取当前访问页面的域名 两种js获取当前域名代

2023-12-08
JavaScript作用域链

2023-05-23
java跨域,Java跨域注解

2023-01-05
网页开发js变量作用域问题四,js中关于变量作用域描述错误的

2022-11-25
js跨域i下载文件,前端下载文件跨域

2022-11-23
java作用,java作用域public

2022-11-29
java作用域,Java作用域if

2023-01-03
js跨域请求cookie(js跨域请求)

本文目录一览: 1、nodejs跨域怎么获取cookie 2、javascript 跨域设置 cookie 3、php js跨域请求,并设置cookies 4、怎么用js跨域读到iframe里的coo

2023-12-08
php和js的作用域(php和js的区别和联系)

本文目录一览: 1、关于jQuery/js变量作用域,及赋值的问题: 2、php和js都有设置cookie的函数,有什么区别吗?会冲突吗?具体用在哪里啊? 3、javascript php asp 有

2023-12-08
关于constjs作用域的信息

本文目录一览: 1、js为什么for in可以用const 2、let和const的引入会对js编程带来哪些改变 3、js全局和局部的作用域 js为什么for in可以用const const的特点是

2023-12-08
java跨域,Java跨域问题解决方案

2023-01-09
phpjs跨域,php 跨域

2022-11-25
自动自动调用js代码的制作,自动生成js

2022-11-24
微信网页js操作(微信网页js操作流程)

本文目录一览: 1、微信小程序wxs的使用(当页面数据渲染前添加js操作) 2、公众号h5中使用微信JS-SDK(个人笔记) 3、JS交互微信之JSAPI支付 微信小程序wxs的使用(当页面数据渲染前

2023-12-08
java作用域,java作用域实例方法

2023-01-09