JavaScript解析顺序和变量作用域

javascript解析顺序和变量作用域

一、变量的作用域

1.全局变量:在代码中任何地方都能够访问得到的变量,拥有全局的作用域。
        A.最外层函数外面定义的变量。
        B.没有定义直接赋值的变量,拥有全局属性。

2.局部变量:只能在固定的代码片段(函数片段中)中访问得到。
        A.函数内部定义的变量,就是局部变量。
        B.参数也是局部变量。
     
二、javascript预解析顺序
    1、<Script></script>块依次解析;
    2、解析代码运行的环境;
    3、对标识符(关键字)(var function )进行解析,解析到相应的环境下;
    4、如果还有<Script></script>块再按照上面的步骤依次解析。

三、名词解释
  (1) 环境:
    
   1.宿主环境
   2.执行环境
     
     执行的环境决定了变量和函数的访问权限。

A.全局环境
      B.函数环境
      c.eval();
   
 (2)作用域
   
   一段代码的作用范围。

(3)作用域链

在一个执行环境中有权访问的变量和函数能够有序有机的进行访问。

时间: 2024-10-12 13:26:55

JavaScript解析顺序和变量作用域的相关文章

javascript的解析顺序和变量作用域

一.变量的作用域 1.全局变量 在代码中任何地方都能够访问得到的变量,拥有全局的作用域. A.最外层函数外面定义的变量. B.没有定义直接赋值的变量,拥有全局属性. 2.局部变量 只能在固定的代码片段(函数片段中)中访问得到. A.函数内部定义的变量,就是局部变量. B.参数也是局部变量. 二.javascript预解析顺序 一.<Script></script>块依次解析. 二.解析代码运行的环境. 三.对标识符(关键字)(var function )进行解析,解析到相应的环境下

javascript 闭包与函数变量作用域

浏览器事件循环工作原理 浏览器有一个事件循环用于检查事件队列,处理延时的事件.UI事件(例如:点击,滚动等),ajax回调,以及提供给setTimeout()和setInterval()的回调,都会依次被事件循环处理. 因此,当调用setTimeout()函数时,即使延迟的时间被设置为0,提供的回调也会被排队 回调会呆在队列中,直到指定的时间用完后,引擎开始执行动作(如果它当前不执行其他动作) 因此,即使setTimeout()回调被延迟0ms,它仍然会被排队,并且直到函数中其他非延迟的语句被执

javaScript的闭包 js变量作用域

js的闭包 js的变量作用域: var a=90; //定义一个全局变量 function test(){ a=123; //使用外层的 a变量 } test(); document.write("a="+a); var a=90; //定义一个全局变量 function test(){ var a=123; //定义一个局部变量 } test(); document.write("a="+a); a=90; //没有var ,就会试着去找(父函数 的 a),如果找

javascript 执行环境,变量对象,作用域链

前言 这几天在看<javascript高级程序设计>,看到执行环境和作用域链的时候,就有些模糊了.书中还是讲的不够具体. 通过上网查资料,特来总结,以备回顾和修正. 要讲的依次为: EC(执行环境或者执行上下文,Execution Context) ECS(执行环境栈Execution Context Stack) VO(变量对象,Variable Object)|AO(活动对象,Active Object) scope chain(作用域链)和[[scope]]属性 EC 每当控制器到达EC

javascript的解析顺序

一.javascript的解析顺序 我们大家所理解的代码的执行顺序都是从上到下的,但是实际上确不是这样的.我们看一下下面的代码. 1 alert(a);2 var a = 1;如果执行顺序是从上到下的,在上面弹出一个a,浏览器会认为从上到下执行的,那么当它alert(a)的时候,他就会发现没有这个东西,那么他就会报错,但是实际上他弹出来的结果是undefined.返回值是undefined说明a没有被定义也就是没有赋值.下面我来讲解一下javascript的解析顺序. 1.ES5中有声明意义的关

js基础--javascript基础概念之变量与作用域

js基础--javascript基础概念之变量.作用域 javascript按照ECMA-262 的定义,变量与其他语言变量有所不同.js变量时松散的,不需要事先定义变量类型的.这使得他只是一个保存特定值的一个名称.变量与其数据类型可以在脚本的生命周期内改变. 还有明白几点: JavaScript的变量作用域是基于其特有的作用域链的,JavaScript没有块级作用域. 基本类型和引用类型的值 ECMAScript 的变量有两种不同的数据类型:分别是 基本数据类型值 和 引用类型值 : 基本数据

第一百零六节,JavaScript变量作用域及内存

JavaScript变量作用域及内存 学习要点: 1.变量及作用域 2.内存问题 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变. 一.变量及作用域 1.基本类型和引用类型的值 ECMAScript变量可能包含两种不同的数据类型的值:基本类型值和引用类型值.基本类型值指的是那些保存在栈

Javascript变量作用域!

基本类型和引用类型 基本类型值指的是简单的数据段,而引用类型值指的是那个可能由多个值组成的对象讲一个值赋值给变量时,javascript解析器首先要确定是基本类型还是引用类型,基本数据类型可以直接操作保存在变量中的值,而引用数据类型的值是保存在内存中的对象,在操作对象是,实际上操作的是对象的引用而不是实际的对象 变量的赋值 如果从一个变量上向另一个变量上复制基本数据类型的值,会在变量对象上创建一个新值,然后把该值复制到新变量的位置上,这个很好理解,来看下例子:javascript var num

JavaScript变量作用域和内存问题(js高级程序设计总结)

1,变量 ECMAScript和JavaScript是等同的吗?个人认为是否定的.我的理解是这样的,ECMAScript是一套完整的标准或者说协议,而JavaScript是在浏览器上实现的一套脚本语言.也就是说,ECMAScript是JavaScript的父类标准.JavaScript是ECMAScript的具体实现.所有ECMAScript定义的数据类型或者语言特性实际上都是伪代码的形式规定的.当然如果可以,ECMAScript也可以有服务器实现,单片机实现(不一定恰当).如果说ECMAScr