// 第11课

 
 

 
 

作用域精解

 
 

运行期上下文,当函数执行时,会创建一个成为执行期上下文的内部对象。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行期上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行期

上下文,当函数执行完毕,他所产生的执行上下文被销毁

 
 

 
 

查找变量:从作用域的顶端依次向下查找

 
 

作用域

 
 

[[scope]]]每个javascript函数都是一个对象,对象中有些属性我们可以访问,但是有些不可以,这些属性仅供javascript

引擎存取,[[scope]]就是其中一个

[[scope]]指的就是我们所说的作用域,其中存储了运行期上下文的集合

 
 

作用域链;[[scope]]中所存储的执行期上下文对象的集合,这个集合呈链式链接,我们把这种链式链接叫做作用域链

 
 

 
 

 
 

javascript执行环境(执行期上下文)

当js控制器(control)进入可执行代码时,控制器会进入一个执行环境,活动的多个执行环境构成执行环境栈,最上面的是正在运行的执行环境,当控制器进入一个新的执行环境时,新的执行环境被放到栈最顶端。

执行环境包含以下三个组件:

 
 

组件 作用目的

词法环境 执行环境内的代码创建的标识符引用的一个词法环境对象

变量环境 执行环境内的代码通过变量表达式和函数表达式创建的绑定的一个词法环境对象。

this绑定 指定该执行环境内的this关键字所关联的值。

 
 

 
 

 
 

立即执行函数

针对初始化功能的函数

只有表达式才能被执行符号执行,(将函数变为表达式,函数执行完立即释放,达到立即执行函数的结果)

被执行符号执行的表达式, 名字被自动忽略(放弃)。

 
 

 
 

不是最初语法,实践中,利用了()的特性

 
 

(function(){}()) 标准写法

(function(){})()

+ - ! function test(){} ()

var a = function( ){} ()

 
 

试题

 
 

function text(a,b,c,d){

console.log(a + b + c + d)

}(1,2,3,4);

 
 

不报错 不执行

 
 

 
 

系统执行结果

function text(a,b,c,d){

console.log(a + b + c + d)

}

 
 

上下分开

 
 

(1,2,3,4);

 

 

/////////////////////////练习题

 

// function text(){

// var arr = [];

// for (var i = 0; i < 10; i++){

// arr[i] = function(){

// document.write(i + " ")

// }

// } return arr

// }

 

// var myarr = text() ;

// for (var j = 0; j < 10; j ++){

// myarr[j]();

// }

 

// 形成闭包,输出10个10

// <!--

// function text(){

// var arr = [];

// for (var i = 0; i < 10; i++){

// arr[i] = function(){

// var m = i;

// document.write(m + " ");

// }

// } return arr;

// }

 

// var myarr = text() ;

// for (var j = 0; j < 10; j ++){

// myarr[j]();

// }

 

// 不能解决问题,函数赋值给arr时,函数不执行,想解决闭包必须让函数立即执行; -->

function text(){

var arr = [];

for (var i = 0; i < 10; i++){

(function(j) {

arr[j] = function(){

document.write(j + " ");

}

 

}(i))

} return arr

}

 

var myarr = text() ;

for (var j = 0; j < 10; j ++){

myarr[j]();

}

Js笔记-第11课的更多相关文章

  1. 奇舞js笔记——第0课——如何写好原生js代码

    摘要 1.好的代码职责要清晰,javscript不要用来操作样式: 2.API要设计的合理:通用性,适度的抽象(数据抽象,过程抽象),可扩展性: 3.效率问题:用好的.合适的算法(前端程序员要把自己当 ...

  2. Js笔记-第17课

    课 // 作业 //深度拷贝 var obj = { name:'rong', age:'25', card:['visa','alipay'], nam :['1','2','3','4','4'] ...

  3. CoolBlog开发笔记第2课:搭建开发环境

    教程目录 1.1 CoolBlog开发笔记第1课:项目分析 前言 今天是CoolBlog开发笔记的第2课,我们将要讲解的是开发环境的搭建.俗话说"工欲善其事必先利其器",Djang ...

  4. CoolBlog开发笔记第4课:数据库模型设计

    教程目录 1.1 CoolBlog开发笔记第1课:项目分析 1.2 CoolBlog开发笔记第2课:搭建开发环境 1.3 CoolBlog开发笔记第3课:创建Django应用 前言 我新书<Py ...

  5. CoolBlog开发笔记第5课:请求与响应

    教程目录 1.1 CoolBlog开发笔记第1课:项目分析 1.2 CoolBlog开发笔记第2课:搭建开发环境 1.3 CoolBlog开发笔记第3课:创建Django应用 1.4 CoolBlog ...

  6. Django商城项目笔记No.11用户部分-QQ登录1获取QQ登录网址

    Django商城项目笔记No.11用户部分-QQ登录 QQ登录,亦即我们所说的第三方登录,是指用户可以不在本项目中输入密码,而直接通过第三方的验证,成功登录本项目. 若想实现QQ登录,需要成为QQ互联 ...

  7. SpringBoot学习笔记(11):使用WebSocket构建交互式Web应用程序

    SpringBoot学习笔记(11):使用WebSocket构建交互式Web应用程序 快速开始 本指南将引导您完成创建“hello world”应用程序的过程,该应用程序在浏览器和服务器之间来回发送消 ...

  8. Android菜鸟的成长笔记(11)——Android中的事件处理

    原文:[置顶] Android菜鸟的成长笔记(11)——Android中的事件处理 Android提供了两种方式来处理事件,一个是基于回调的事件处理,另一个是基于监听的事件处理,举个例子: 基于回调的 ...

  9. CoolBlog开发笔记第3课:创建Django应用

    教程目录 1.1 CoolBlog开发笔记第1课:项目分析 1.2 CoolBlog开发笔记第2课:搭建开发环境 前言 经过上一节我们已经创建了CoolBlog工程,但是关于CoolBlog的功能代码 ...

随机推荐

  1. 【实验吧】该题不简单——writeup

    题目地址:http://ctf5.shiyanbar.com/crack/3/ 一定要注意读题: 要求找出用户名为hello的注册码,这八成就是 要写注册机啊! ——————————————————— ...

  2. Java工程打包成jar可执行文件

    将一个工程中的类打包成jar文件,步骤参考如下: 1.选择file -> project structure 2. 选择Arifacts->JAR->form modules wit ...

  3. path不相等的子集,父级

    SELECT a.path,b.path from comm_department_temp a INNER JOIN comm_department_temp b on a.id=b.parent_ ...

  4. js 检查字符串中是否包含中文(正则)

    function CheckChinese(val){ var reg = new RegExp("[\\u4E00-\\u9FFF]+","g"); if(r ...

  5. GPIO的翻转操作方法

    STM32在进行IO翻转操作的时候可以使用以下方法:以PE.5为例 GPIO_WriteBit(GPIOE,GPIO_Pin_5,(BitAction)(1-(GPIO_ReadOutputDataB ...

  6. nuxt.js实战踩坑记录

    读万卷书不如行万里路,必须实践出真理! 看官方文档安装项目vue init nuxt-community/starter-template <project-name>注意:这是新手项目不 ...

  7. springmvc的DispatcherServlet源码——doDispatch方法解析

    DispatcherServlet的doDispatch方法主要用作职责调度工作,本身主要用于控制流程,主要职责如下: 1.文件上传解析,如果请求类型是multipart将通过MultipartRes ...

  8. BroadCast广播机制应用与实例

    如何编写广播接收器 第一步:需要继承BroadcastReceiver类,覆写其中的onReceive()方法. class MyBroadcastReceiver extends Broadcast ...

  9. 深入JVM内核---原理,诊断与优化

    JVM的概念 JAM是Java Virtual Machine的简称.意为Java虚拟机 虚拟机 指通过软件模拟的具有完整硬件系统功能的,运行在一种完整隔离环境中的完整计算机系统 有哪些虚拟机 - V ...

  10. cf1027F. Session in BSU(并查集 匈牙利)

    题意 题目链接 $n$个人,每个人可以在第$a_i$天或第$b_i$,一天最多考一场试,问在最优的情况下,最晚什么时候结束 Sol 自己只能想到暴力匈牙利二分图匹配,然而还是被构造数据卡了.. 标算很 ...