javascript中作用域

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

    <script type="text/javascript">
        // 什么叫作用域 ??
        // 从字面意思来理解: 起作用的那块区域
        // 作用域是限制什么的? 变量 还是 代码逻辑
        // 一般说的作用域, 就是指: 变量的作用域

        // 作用域主要由两种作用域:
        // 1 块级作用域 (JS不支持)
        // 2 词法作用域

        // 1 什么叫做块级作用域?
        //         常见的支持块级作用域的语言:
        //                 C 语言( C系,如:Java、Object-C/Swift、C# / C++)
        //         在支持块级作用域的语言里面, 一个代码块就能来限制变量的使用
        // if( true ) {
        //     var num = 123;
        // }
        // console.log(num);
        // for(var i = 0; i < 10; i++) {
        //     console.log(i);
        // }
        // console.log(i);
        // 在支持块级作用域的语言中,在for循环的外部是访问不到i的值

        // 2 词法作用域
        // 一个变量的作用范围, 在代码写出来的那一刻就定下了, 不会根据代码的运行
        //         而受影响.
        // 换句话说: 变量的作用范围只与代码声明的位置有关, 而与运行时无关
        //              函数也是同样的道理, 只与函数声明的位置有关, 而与调用的位置无关
        // var num = 123;

        // 面试题
        var num = 123;
        function f1() {
            console.log(num); // 123??
        }

        function f2() {
            var num = 456;
            f1();
        }

        f2(); 

        //
        /*var i;
        for(i = 0; i < 10; i++) {
            // console.log(i);
        }
        // 在js中能在for循环的外部来访问到 循环内部定义的变量
        console.log(i);  // ??? 10*/
    </script>
</body>
</html>
时间: 2024-12-24 08:34:40

javascript中作用域的相关文章

JavaScript中作用域和预解析

作用域以及预解析 在javascript中作用域是非常重要的,本文章将会说明作用域以及我们在工作,以及面试中的一些面试题,如果有不足的地方希望大家可以评论指出来,自己一定会及时的改正错误,避免大家走入一些误区. 谈及作用域先就必须要说明预解析和词法作用域. 下面我们先说明一下: 预解析 代码在正常执行操作之前会对文档进行一次解析,这个操作就是将声明提升, 声明包括全局范围内 1.带有var的变量, 2.函数 文档预解析后会把文档中在全局函数中的内容储存起来,将全局中带有var的变量(var和变量

分析javascript中作用域

1.javascript中的作用域 正如其他语言一样,在javascript中,变量的作用域也有全局和局部作用域的划分. 2.全局作用域 1)所有在最外层定义(非函数体内定义)的变量拥有全局作用域 2)直接赋值的变量,自动默认为全局作用域 <span style="font-size:18px;"> <script> //函数体外 var name = "第一个name"; //全局变量 sex = "女"; //全局变量

JavaScript中作用域链和闭包

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

Javascript中作用域的修改以及with语句

背景 问题来自看JavaScript高级程序设计遇到了延长作用域的问题.不能理解文中解释的内容,于是网上查到一些相关文章. 首先需要了解的是,JavaScript中执行环境一共有两种:全局作用域和局部作用域.而在浏览器中.全局作用域是Windows对象.自下而上,局部作用域可以访问全局作用域(如果在子作用域中没有找到的话).反之则不可以. 但是使用with则可以起到延长作用域的作用. 摘抄相关文章 文章一 关于Javascript静态作用域的一些心得. 之前在看JS大牛BYVoid的<<Nod

JavaScript中---作用域

作用域: 变量还有函数作用的范围. 浏览器的内核主要有两大功能,一个是渲染页面,另一个就是我们的JavaScript的解释器了. 我们主要来说说JavaScript解释器,在解析时是怎么样的工作原理. 在解析的时候,首先会发生预解析,就是说不会直接一行一行去执行我们所写的代码,它会先去找有哪些声明的变量,遇见函数体的时候会把函数放到最上面的位置,当变量名和函数名重名的时候函数会替代变量声明. 在解析的时候碰到的是个函数体,那么会预先处理函数体中的变量或者函数,知道有哪些声明的事项. 如果是变量,

理解JavaScript中作用域链的关系

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

JavaScript中作用域和作用域链的简单理解(变量提升)

通过阅读<JS高级程序设计>这本书,对js中的作用域和作用域链知识有了初步的了解和认识,准备成笔记供大家参考,笔记中字数比较多,但个人认为叙述的挺详细的,所以希望读者耐心看.再者,本人了解的比较基础,不足的地方希望大家一起交流,共同学习. 1.执行环境(execution context) 执行环境定义了变量和函数有权访问的其他数据,决定了他们各自的行为.每个执行环境都有与之对应的变量对象(variable object),保存着该环境中定义的所有变量和函数.我们无法通过代码来访问变量对象,但

JavaScript中作用域和作用域链解析

学习js,肯定要学习作用域,js作用域和其他的主流语言的作用域还存在很大的区别. 一.js没有块级作用域. js没有块级作用域,就像这样: if(){ var a = 100: console.log(a) //输出100 } console.log(a) //输出100 js中像if,for,switch之类的语句,他们包含的代码块里面的变量,在代码块外面也能被读取,所以说,js没有块级作用域. 二.js的全局变量 js中规定,全局变量都可以看作是window的属性,而且全局变量能够被所有的代

简单说说Javascript中的作用域链

    Javascript中作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期.变量的作用域有全局作用域和局部作用域两种.当查找变量的时候,会先从当前上下文的变量对象中查找,如果没有找到,就会从父级执行上下文的变量对象中查找,一直找到全局上下文的变量对象,也就是全局对象.这样由多个执行上下文的变量对象构成的链表就叫做作用域链. 看几个题目: A : 1 var a = 1 2 function fn1(){ 3 function fn2(){ 4 console.lo