JavaScript.延长作用域链

<!DOCTYPE html>
<html>
<head>
    <title>Execution Context Example 3</title>
    <script type="text/javascript">
        function buildUrl() {
            var qs = "?debug=true";

            with(location) {
                var url = href + qs;
            }

            return url;
        }

        var result = buildUrl();
        alert(result);
    </script>

</head>
<body>

</body>
</html>

时间: 2024-10-20 19:42:55

JavaScript.延长作用域链的相关文章

javascript:with的用法以及延长作用域链

转自:http://lllt.iteye.com/blog/1246424 <Javascript高级程序设计(第二版)>第66页中提到:“由于with语句的变量对象是只读的,结果url就成了函数执行环境的一部分,因而可以作为函数的值被返回.”,不知道谁看完觉得一头雾水? 首先来看看他举的例子: Js代码   function buildUrl(){ var qs="?debug=true"; with(location){ var url=href+qs; } retur

JavaScript的作用域链

问题的提出 首先看一个例子: var name = 'laruence'; function echo() { alert(name); var name = 'eve'; alert(name); alert(age); } echo(); 运行结果是什么呢? 上面的问题, 我相信会有很多人会认为是: laruence eve [脚本出错] 因为会以为在echo中, 第一次alert的时候, 会取到全局变量name的值, 而第二次值被局部变量name覆盖, 所以第二次alert是’eve’.

JavaScript系列----作用域链和闭包

1.作用域链 1.1.什么是作用域 谈起作用域链,我们就不得不从作用域开始谈起.因为所谓的作用域链就是由多个作用域组成的.那么, 什么是作用域呢? 1.1.1作用域是一个函数在执行时期的执行环境. 每一个函数在执行的时候都有着其特有的执行环境,ECMAScript标准规定,在javascript中只有函数才拥有作用域.换句话,也就是说,JS中不存在块级作用域.比如下面这样: function getA() { if (false) { var a = 1; } console.log(a); /

JavaScript中作用域链和闭包

一.匿名函数 1.1 匿名函数的概念 ? 声明一个没有函数名的函数,就是匿名函数. ? 有函数名的函数就是具名函数. 看下面的代码: <script type="text/javascript"> /* //这里定义了一个函数,而且没有函数名.这样写语法是错误的,如果允许这样定义,那么根本就没有办法调用. //所以,我们可以用一个变量来存储一下 function(){ } */ // 声明了一个匿名函数,并把匿名函数赋值给变量f. 注意这个时候这个匿名函数并没有执行. va

理解JavaScript中作用域链的关系

javascript里的关系又多又乱.作用域链是一种单向的链式关系,还算简单清晰:this机制的调用关系,稍微有些复杂:而关于原型,则是prototype.proto和constructor的三角关系.本文先用一张图开宗明义,然后详细解释原型的三角关系 概念 上图中的复杂关系,实际上来源就两行代码 function Foo(){}; var f1 = new Foo; [构造函数] 用来初始化新创建的对象的函数是构造函数.在例子中,Foo()函数是构造函数 [实例对象] 通过构造函数的new操作

javascript函数作用域链 词法作用域

在开发语言中常见的作用域规则有  块级作用域和词法作用域 作用域 顾名思义就是起作用的区域  定义一变量后 ,可以在此范围作用的区域 一.块级作用域就是用一个块结构分割变量的访问区域  块即{ } 代表语言有C 系列语言 二.词法作用域就是变量的作用范围,在书写代码时就已经决定作用的范围,与运行时无关 特点:分割作用域只有函数 变量名提升 函数名提升 函数的声明比变量的声明优先级高 function a(){ } var a; alert(a);//打印出a的函数体 var a; functio

javascript之作用域链

作用域链 作用域链是对象的集合,在代码的上下文里,他们提供给标识符进行查找的. 这个规则也很简单,类似于原型链:如果一个变量在它自己的作用域(自己的变量/激活对象)未找到的话,它会继续找它的 父变量对象,依次类推. 对于上下文,标识符有: 变量的名称,函数声明,形参,等等.当一个函数查找它代码的标识符,这个标识符不是本地的变量( 或本地函数,或一个形参),这个变量就就称为自由变量.那么查找这些自由变量就会使用到作用域链. 通常情况下,作用域链是所有的父变量对象的集合,加上(在这个作用域链最前面的

js 延长作用域链

function buildUrl() { var qs = "?debug=true"; with (location) { var url = href + qs; } return url; } console.log(buildUrl()) 在此,with 语句接收的是 location 对象,因此其变量对象中就包含了 location 对象的所有属 性和方法,而这个变量对象被添加到了作用域链的前端.buildUrl()函数中定义了一个变量 qs.当在 with 语句中引用变量

JavaScript之作用域与作用域链

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