// 第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. ue4 代码入门

    官网:暴露游戏元素给蓝图 https://docs.unrealengine.com/latest/CHN/Engine/Blueprints/TechnicalGuide/ExtendingBlue ...

  2. Unite Europe案例项目《影子战术》层级优化经验分享

    http://forum.china.unity3d.com/thread-25087-1-9.html 在Unite Europe 2017的Keynote主题演讲中,我们为大家分享了将主机游戏&l ...

  3. 转 BeanShell 简介与学习(一篇就够)

      2017年05月17日 21:24:10 金刚龙123 阅读数:5131 标签: BeanShell 更多 个人分类: 开发语言及脚本语言   简介: BeanShell是一种脚本语言,一种完全符 ...

  4. 8.Python初窥门径(文件操作)

    Python (文件操作) 一.文件操作方式 打开文件 open 操作文件 read or write 关闭文件 close 二.打开文件的方式(第一种) 语法 : f=open("文件&q ...

  5. 管理docker容器

    如果在容器中启动sshd,存在开销和攻击面增大的问题.同时也违反了Docker所倡导的一个容器一个进程的原则. docker attach 37d61466c69e \\注意:如果在stdin中exi ...

  6. docker镜像删除

    1. 查看镜像 docker images [-q] 只列出image id [-a] 列出所有的image 2. 查看运行的镜像 docker ps [-q] 只列出container id [-a ...

  7. 03.Jquery Mobile中的按钮

    一. 基础按钮 1.设置链接的data-role,使其变成按钮. <a href="index.html" data-role="button">L ...

  8. 遇到的一些vue的问题

    一.事件绑定中的事件处理方法后加不加括号问题 1.例如: click事件后加不加括号 a.@click = "getContent" b.@click = "getCon ...

  9. MySQL数据库(4)

    子查询,MYSQL创建用户和授权,可视化工具N啊vicat的使用,pymysql模块的使用

  10. python 7 dict和set

    dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例子,假设要根据同学的名字 ...