JavaScript词法作用域经典练习题

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<script>
 //1 ====================================================
 var a;
 if (‘a‘ in window) {
   var a = 10;
 }
 alert(a);  // 10
//  注:  in 是一个关键字  用于判断 ‘属性‘ in 对象  当前这个属性是否是对象的属性
//2 ====================================================
 var foo = 1;
 function bar() {
   if (!foo) {
     var foo = 10;
   }
   alert(foo); //  10

//      预解析阶段:
//       var foo;
//      代码执行阶段:
       if(!foo){
         foo = 10;
       }
       alert(foo);

 }
 bar();

 // 代码拆分:
//  预解析阶段:
 var foo;
 function bar(){}
 // 代码执行阶段:
 foo = 1;
 bar();

  //3 ============================================================
 var num = 123;
 function f1(num) {
//    var num = 456;
   console.log(num); // 456
 }
 function f2() {

   var num = 456;
   f1(num);//f1(456)
 }
 f2();

  //4 =====================================================================

 function fn(){
   var a = 1, b = 1, c = 1;
//    var a = 1;
//    var b = 1;
//    var c = 1;
 }
 fn();
 console.log(c); //1  e
 console.log(b); //1  e
 console.log(a); //e  e

 function fn1(){
   var a = b = c = 1;
   var a = 1;
   b = 1;
   c = 1;
 }
 fn1();
 console.log(c); // 1
 console.log(b); // 1
 console.log(a); // e

  //5 ================================================================
 var a ;
 function a(){
   console.log(‘呵呵‘)
   function a(){
     a = 4;
     console.log(‘哈哈‘)
   }
   a();
   console.log(a);  // 4
 }
 a();
 console.log(a); // 外面的a

 //6  ===================================================================
 var a = 1;
 function a(){
   a++;
 }
 console.log(a) //1

  // 7 =====================================================================
 var a = { x : 1 }
 var b = a;
 a.x = a = { n : 1};
 console.log(a.x); // undefined
 console.log(b.x); //  {n : 1}

</script>
</body>
</html>

原文地址:https://www.cnblogs.com/autoXingJY/p/9053907.html

时间: 2024-08-01 05:12:04

JavaScript词法作用域经典练习题的相关文章

JavaScript词法作用域与调用对象

关于 Javascript 的函数作用域.调用对象和闭包之间的关系很微妙,关于它们的文章已经有很多,但不知道为什么很多新手都难以理解.我就尝试用比较通俗的语言来表达我自己的理解吧. 作用域 Scope Javascript 中的函数属于词法作用域,也就是说函数在它被定义时的作用域中运行而不是在被执行时的作用域内运行.这是犀牛书上的说法.但"定义时"和"执行(被调用)时"这两个东西有些人搞不清楚.简单来说,一个函数A在"定义时"就是 functio

JavaScript词法作用域(你不知道的JavaScript)

JavaScript并不是传统的块级作用域,而是函数作用域! 一.作用域 1. JavaScript引擎在代码执行前会对其进行编译,在这个过程中,像var a = 2 这样的声明会被分解成两个独立的步骤: 第一步(编译阶段):var a 在其作用域中声明新变量.这会在最开始的阶段,也就是代码执行前进行. 第二步(运行阶段):a = 2 会查询变量a(LHS查询)并对其进行赋值. 2. LHS & RHS(当前作用域->上级作用域->...->全局作用域) LHS(左侧):试图找到

利用eval()来“欺骗”JavaScript词法作用域

我们知道,所谓"词法作用域"就是按照代码书写时的样子内部函数可以访问函数外部的变量,如果函数外存在函数内所具有的同名变量,则函数内部要获取该同名变量的值会屏蔽掉函数外的同名变量(本来就是两个不同的变量,只是同名而已.另外注意,在同一个作用域是同一个变量,所以不要重复声明,否则第二个声明会被忽略). 利用eval()可以"欺骗"词法作用域: function foo(str){ eval(str); console.log(a); } var a=100; foo(&

javascript一个作用域案例分析

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> // 词法作用域: // 在js中只有函数能够形成一个作用域, 所以, 词

你不知道的Javascript(上卷)读书笔记之二 ---- 词法作用域

在前一篇文章中,我们把作用域定义为"管理.维护变量的一套规则",接下来是时候来深入讨论一下Js的作用域问题了,首先我们要知道作用域一般有两种主要的工作类型,一种是词法作用域,一种是动态作用域, Javascript采用的是词法作用域, 关于动态作用域的有兴趣的可以自行Google. 1.词法阶段 首先我们要理解"词法阶段"这个词语,我们已经了解到Js存在一个编译阶段,编译阶段的第一步就是分词/词法分析,我们可以简称为"词法阶段" 简单来说,词法作

《你不知道的JavaScript》读书笔记(二)词法作用域

JavaScript 采用的是 词法作用域 的工作模型. 定义 词法化:大部分标准语言编译器的第一个工作阶段叫词法化(单词化),这个过程会对源代码中的字符进行检查,如果是有状态的解析过程,还会赋予单词意义. 词法作用域:定义在 词法阶段 的作用域. 词法作用域由谁决定:由你在写代码时将 变量 和 块作用域 写在哪里来决定.因此大部分情况下,词法分析器处理代码时会保持作用于不变. [例] function foo(a){ var b = a * 2; function bar(c){ consol

JavaScript 词法、静态、动态作用域初级理解

开始之前 由于本人也是JavaScript初学者,记录学习经过,怕以后会忘记. 对于JavaScript 初学者来说,最难的不是代码部分,而是对很多书籍中的术语的理解,大多时候想要理解一段JavaScript书籍中的解释内容,就会涉及很多术语,在术语不通的情况下都会对内容理解偏差(导致很难记住所学内容),由于本人在阅读书籍时经常会遇到这一问题,所以今天将记下这一基础内容. 一.需要关注点 1)执行环境(作用域)函数执行环境 变量作用域 2)函数作用域和声明提前 3)自由变量 4)词法作用域和静态

深入理解javascript作用域系列第二篇——词法作用域和动态作用域

× 目录 [1]词法 [2]动态 前面的话 大多数时候,我们对作用域产生混乱的主要原因是分不清楚应该按照函数位置的嵌套顺序,还是按照函数的调用顺序进行变量查找.再加上this机制的干扰,使得变量查找极易出错.这实际上是由两种作用域工作模型导致的,作用域分为词法作用域和动态作用域,分清这两种作用域模型就能够对变量查找过程有清晰的认识.本文是深入理解javascript作用域系列第二篇——词法作用域和动态作用域 词法作用域 第一篇介绍过,编译器的第一个工作阶段叫作分词,就是把由字符组成的字符串分解成

[label][JavaScript]读nowmagic - js词法作用域、调用对象与闭包

原文链接:                 http://www.nowamagic.net/librarys/veda/detail/1305 作用域(scope) JavaScript 中的函数属于词法作用域,也就是说函数在它被“定义时”的作用域中运行,而不是在“被执行时”的作用域内运行. 什么是“定义时”? 什么是 “被执行时”? 定义时: 一个函数A在“定义时”就是 function A() { }这个语句执行的时候,就是定义这个函数的时候. 被执行时: A“被执行时”(被调用的时侯)是