使用变量对象引出作用域链

<script type="text/javascript">
  var name="xm"; //全局变量,window.name===name; 返回:true
  function fn(){ //全局变--方法 , window.fn()====fn(); 返回:true
      var name="xh"; //局部变量 , 可以理解为fn().name===name。(本来是看不到的,为了好理解,虚拟为一个实例) 
      var sex="male"; //局部变量 ,可以理解fn().sex===sex。
      function fn2(){ //局部变量--方法,可以理解为fn().fn()2。
        var name="xl"; //局部变量
        var age=16; //局部变量
      }
  }

  // document.write(person);  这样写会报错,显示变量person未定义,因为上文本身就不存在这样一个变量。
  document.write(window.person); //在javascript中,在全局变量中的老大是window,

//上面一句的person是一个不存在的变量,现在在person前面加window----window.person。

//现在的person是一个属性了。window.person,不会报错,因为person只是对象window的一个属性,

//只会显示Undefined,未定义。
</script>

有上面变量对象可以得到如下:

我们把,window,fn(),fn2()看成3个变量对象,后面两个实际不存在的,只是为了好理解引出作用域链。如下图:

上图就是一个作用域链:作用域链只能从内往外访问,不能从外往里面访问。切记。使用作用域链进行查询和浪费资源,

因为当作用域链非常长的时候,查询时间久会很长。所以,局部变量一定是快于全局变量的,内层变量的运行速度一定快于外层变量的。

变量对象window的属性:name , fn() ===>变量对象fn()的属性:name , sex, fn2() ===> 变量对象fn2()的属性:name , age .

全局变量可以在局部中访问,局部变量不可以在全局访问。

以是由全局变量 到 局域变量,优先级:低 到 高,最里面最高。同名变量越内层优先级越高。

--------

延长作用域链:

<script type="text/javascript">

var person={};

person.name="xm";

person.sex="male";

var score=4;

with(person){  //with就是person,就是同一个变量对象。

name="xh";

sex="female";

score=44;

}

console.log(person.name);

console.log(person.sex);

console.log(score);//如下图:person变量对象没有socre属性时,会一直向外寻找该属性代替,

//距离person变量对象越近优先级越高。这里就使用变脸对象window的属性进行代替了。

</script>

上图只是做一个演示,可以使用with(){} 延长作用域链,但实际中是不使用的,因为作用域链很费时费力,速度很慢。

只说明作用域链:全局变量可以在局部中访问,局部变量不能在全局中访问。

PHP的时间函数date()//使用date()函数时,必须先设定时区:date_default_timezone_set("Asia/Shanghai");echo "today is ".date("y/m/d/h/i/s/sa")."<br>";date() 函数的格式参数是必需的,它们规定如何格式化日期或时间。下面列出了一些常用于日期的字符:    d - 表示月里的某天(01-31)    m - 表示月(01-12)    Y - 表示年(四位数)    1 - 表示周里的某天(这个英文L的小写l,不是数字1)其他字符,比如 "/", "." 或 "-" 也可被插入字符中,以增加其他格式。下面是常用于时间的字符:    h - 带有首位零的 12 小时小时格式    i - 带有首位零的分钟    s - 带有首位零的秒(00 -59)    a - 小写的午前和午后(am 或 pm)如果从代码返回的不是正确的时间,有可能是因为您的服务器位于其他国家或者被设置为不同时区。因此,如果您需要基于具体位置的准确时间,您可以设置要用的时区。下面的例子把时区设置为 "Asia/Shanghai",然后以指定格式输出当前时间:date_default_timezone_set("Asia/Shanghai");echo "today is ".date("y/m/d/h/i/s/a")."<br>"//sa可以连写,表示:秒和pm/am===============================通过 PHP mktime() 创建日期----make time语法:mktime(hour,minute,second,month,day,year);如下:$d=mktime(9, 12, 31, 6, 10, 2015);echo "创建日期是 " . date("Y-m-d h:i:sa", $d);//谨记$d不能使用引号。--------通过 PHP strtotime() 用字符串来创建日期PHP strtotime() 函数用于把人类可读的字符串转换为 Unix 时间。语法: strtotime(time,now) 如下:date_default_timezone_set("Asia/Shanghai");//创建时间一定要先设定时区 $c=strtotime("10:30am October 14 2018"); echo "今天是:".date("y-m-d-h-i-sa",$c)."<br>";---//设定为上海时区 date_default_timezone_set("Asia/Shanghai"); //可以用next days,+/-n days/months/years/seconds/hours/minutes... $d=strtotime("yesterday"); echo "明天的时间为:".date("y-m-d-h-i-l-sa",$d)."<br>"; $a=strtotime("-6 days"); echo "三个月后的时间为:".date("y-m-d-h-i-sa",$a)."<br>";

原文地址:https://www.cnblogs.com/Knowledge-is-infinite/p/10618360.html

时间: 2024-10-04 19:54:32

使用变量对象引出作用域链的相关文章

执行环境、变量对象和作用域链

执行环境又称执行上下文,英文缩写是EC(Execution Context),每当执行流转到可执行代码时,即会进入一个执行环境.在JavaScript中,执行环境分三种: 全局执行环境 — 这个是最外围的代码执行环境,一旦代码被载入,引擎最先进入的就是这个环境.在浏览器中,全局环境就是window对象,一次所有全局属性和函数都是作为window对象的属性和方法创建的.全局执行环境直到应用程序退出时才会被销毁. 函数执行环境 — 当执行一个函数时,JavaScript引擎进入执行环境.某个执行环境

变量对象、作用域链和This

变量对象 作用域链 This 整理自:https://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html 系列文章中变量对象,作用域链和this三篇文章 原文地址:https://www.cnblogs.com/shaunyang/p/10348640.html

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

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

*JS:执行环境、变量对象、活动对象和作用域链

var a=1; function b(x){ var c=2; console.log(x); } b(3); ·执行环境(execution context),也称为环境.执行上下文.上下文环境.执行上下文环境: 每次当控制器转到ECMAScript可执行代码的时候,即会进入到一个执行上下文.执行上下文(简称-EC)是ECMA-262标准里的一个抽象概念,用于同可执行代码(executable code)概念进行区分. 通俗的话来讲就是,JS中的函数运行不能仅仅看函数内部有哪些变量,再简单的

1--面试总结-js深入理解,对象,原型链,构造函数,执行上下文堆栈,执行上下文,变量对象,活动对象,作用域链,闭包,This

参考一手资料:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/中文翻译版本:https://zhuanlan.zhihu.com/p/32042645 Javascript 是一种单线程编程语言,这意味着它只有一个调用栈,call Stack(调用栈 ,,先入后出) 核心:对象,原型链,构造函数,执行上下文堆栈,执行上下文,变量对象,活动对象,作用域链,闭包,This js原型链? 定义 原型对象也是简单的对象并且可以拥有它们自

JavaScript的作用域和变量对象

变量对象 先来说说什么是变量对象.变量对象中又存储了什么东西吧. JavaScript中的运行环境包含全局运行环境和函数运行环境这两种,每进入到一个运行环境都会创建一个变量对象,这个对象中记录了在当前运行环境中能够訪问到的变量,它们以变量对象的属性形式存在.也就是说这个变量对象成为"作用域"这个抽象概念的实体. 同一时候,变量对象中的属性记录是有一定先后顺序的.而且属性值究竟是实际的值还是undefined也是分阶段的(进入上下文(函数開始调用,但还未运行内部的详细代码).运行代码阶段

JavaScript中的变量、参数、作用域和作用域链

基本类型和引用类型 在JavaScript中有两种数据类型值.基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指的是可能由多个值构成的对象.在JavaScript中有5种基本数据类型,分别是:Undefined.Null.Boolean.Number.String(这个和其他编程语言不一样,需要注意).基本数据类型是按值进行访问的,一般都存储在栈中.而引用类型的值都保存在内存堆上面,在内存栈上保存一个对它的引用(这个和C#,Java等编程语言存储对象的方式类似).在JavaSc

js中的作用域链

js中的执行环境: 所谓执行环境(有时也称环境)它是JavaScript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据 ,决定了它们各自的行为.而每个执行环境都有一个与之相关的变量对象,环境中定义的所有变量和函数都保存在这个对象中. js中的作用域链: 每个函数都有自己的执行环境,当代码在执行环境中执行时,就会创建变量对象的作用域链.作用域链保证了对执行环境有权访问所有变量和函数的有序访问.作用域链的前端,始终都是当前执行的代码所在的环境的变量对象,如果环境是一个函数,那么它的

JavaScript之作用域与作用域链

今天是2016的第一天,我们得扬帆起航踏上新的征程了.此篇阐述JavaScript中很重要的几个概念:作用域与作用域链及相关知识点. 我们先从变量与作用域的行为关系开始讨论. 变量作用域 JavaScript中,变量有全局变量及局部变量之分,而能定义变量作用域的语块只有函数.与局部变量有关的一种有趣特性,在此处不得不谈--变量提升. 变量提升 变量提升为何物? JavaScript的变量声明会被提升到它们所在函数的顶部,而初始化仍旧在原来的地方.JavaScript引擎并没有重写代码:每次调用函