// 第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. 3DMAX 10 角色动作

    基本流程 1保存初始姿势(保存原始T动作) 2确定动画帧数时间 3找参考动作姿态,绘制关键帧草图 4先调整出初始姿势,如果是循环动画,需要把第一帧复制到最后一帧 5大体先想好在固定时间比例调草图的关键 ...

  2. eclipse中设置vm后缀文件以html高亮形式显示

    第一步,打开Windows-preference-General-ContentTypes-Text-HTML 第二步,点击Add添加 "*.vm",Default-encodin ...

  3. iOS风格的弹出框(alert,prompt,confirm)

    前两天,自己写了一个简单的插件,在移动端使用,不管是安卓手机还是iOS系统的手机,弹出框统一使用iOS风格的. 该弹出框是依赖于jQuery的,当然也可以将用jq写的几句代码转换为原生代码. 今天把代 ...

  4. python 之 软件开发目录规范 、logging模块

    6.4 软件开发目录规范 软件(例如:ATM)目录应该包含: 文件名 存放 备注 bin start.py,用于起动程序   core src.py,程序核心功能代码   conf settings. ...

  5. 基于IDEA实现SSM整合框架的搭建配置流程

    1.创建数据库表,以员工信息表为例子: DROP TABLE IF EXISTS `em_info`; CREATE TABLE `em_info` ( `em_id` INT(50) NOT NUL ...

  6. Spring IOC 的源码分析

    刚学习Spring的时候,印象最深的就是 DispatcherServlet,所谓的中央调度器,我也尝试从这个万能胶这里找到入口 configureAndRefreshWebApplicationCo ...

  7. Git 深度学习填坑之旅三(分支branch、远程操作)

    0x01 分支branch依旧借用大表哥(@表元素)的图 很多时候,我们需要建立另一条分支来进行项目的独立开发,当完成后再跟主流回合进行合并这个时候就要启用分支branch功能 git branch ...

  8. python——字符编码

    Unicode 是字符集 UTF-8 是编码规则 Unicode:给每一个字符分配一个唯一的ID(又称码位). 编码规则:将码位转换为字节序列的规则. 1.什么是字符编码:字符翻译成数字,所遵循的标准 ...

  9. echart表格,动态的通过ajax从后台获取数据动态的展示数据

    官网上都是介绍的echar表格的展示方法,但是都是静态数据,一开始的时候我总是纳闷,这些数据都是怎么上上去的 , 后来通过一些方法,当然这些方法也不是我自己写出来的,也是通过在网上收集了一下 ,现在才 ...

  10. $.extend(),与$.fn.extend() 讲解(一)

    jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...