Js笔记-第11课
// 第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课的更多相关文章
- 奇舞js笔记——第0课——如何写好原生js代码
摘要 1.好的代码职责要清晰,javscript不要用来操作样式: 2.API要设计的合理:通用性,适度的抽象(数据抽象,过程抽象),可扩展性: 3.效率问题:用好的.合适的算法(前端程序员要把自己当 ...
- Js笔记-第17课
课 // 作业 //深度拷贝 var obj = { name:'rong', age:'25', card:['visa','alipay'], nam :['1','2','3','4','4'] ...
- CoolBlog开发笔记第2课:搭建开发环境
教程目录 1.1 CoolBlog开发笔记第1课:项目分析 前言 今天是CoolBlog开发笔记的第2课,我们将要讲解的是开发环境的搭建.俗话说"工欲善其事必先利其器",Djang ...
- CoolBlog开发笔记第4课:数据库模型设计
教程目录 1.1 CoolBlog开发笔记第1课:项目分析 1.2 CoolBlog开发笔记第2课:搭建开发环境 1.3 CoolBlog开发笔记第3课:创建Django应用 前言 我新书<Py ...
- CoolBlog开发笔记第5课:请求与响应
教程目录 1.1 CoolBlog开发笔记第1课:项目分析 1.2 CoolBlog开发笔记第2课:搭建开发环境 1.3 CoolBlog开发笔记第3课:创建Django应用 1.4 CoolBlog ...
- Django商城项目笔记No.11用户部分-QQ登录1获取QQ登录网址
Django商城项目笔记No.11用户部分-QQ登录 QQ登录,亦即我们所说的第三方登录,是指用户可以不在本项目中输入密码,而直接通过第三方的验证,成功登录本项目. 若想实现QQ登录,需要成为QQ互联 ...
- SpringBoot学习笔记(11):使用WebSocket构建交互式Web应用程序
SpringBoot学习笔记(11):使用WebSocket构建交互式Web应用程序 快速开始 本指南将引导您完成创建“hello world”应用程序的过程,该应用程序在浏览器和服务器之间来回发送消 ...
- Android菜鸟的成长笔记(11)——Android中的事件处理
原文:[置顶] Android菜鸟的成长笔记(11)——Android中的事件处理 Android提供了两种方式来处理事件,一个是基于回调的事件处理,另一个是基于监听的事件处理,举个例子: 基于回调的 ...
- CoolBlog开发笔记第3课:创建Django应用
教程目录 1.1 CoolBlog开发笔记第1课:项目分析 1.2 CoolBlog开发笔记第2课:搭建开发环境 前言 经过上一节我们已经创建了CoolBlog工程,但是关于CoolBlog的功能代码 ...
随机推荐
- 关于unity中BindChannels的理解
http://blog.csdn.net/wpapa/article/details/51794277 官方文档:http://docs.unity3d.com/Manual/SL-BindChann ...
- pycharm安装教程,汉化教程,以及正版激活码---
密钥在下面 安装过程 PyCharm2019本地下载: http://www.100c1.com/upload/default/20190420/1c08a3209029093a8b34df941f1 ...
- PHP闭包和匿名函数
概念 闭包和匿名函数在PHP5.3.0中被引入. 闭包 闭包是指创建时封装周围环境的函数.即使闭包所在的环境不存在了,闭包中封装的状态依然存在.这个概念很难理解,不过没关系,继续看下去就会明白了. 匿 ...
- C 语言实例 - 阶乘
C 语言实例 - 阶乘 一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1.自然数n的阶乘写作n!. n!=×××...×n.阶乘亦可以递归方式定义:!=, ...
- react native 使用iconfont
安卓的配置: 1.在android/app/src/assets/fonts文件夹下复制从iconfont下载的 (下载后的icon名称可以在下载来的文件中的html文件中) 2.在android ...
- Java基础笔记(六)——进制表示、ASCII码和Unicode编码
Java中有三种表示整数的方法:十进制.八进制.十六进制. 八进制:以0开头,包括0~7的数字.如:int octal=020; //定义int型变量存放八进制数据 十六进制:以0x或0X开头,包括 ...
- JavaScript进阶 - 第9章 DOM对象,控制HTML元素
第9章 DOM对象,控制HTML元素 9-1 认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属 ...
- Cookie认证
Cookie认证 由于HTTP协议是无状态的,但对于认证来说,必然要通过一种机制来保存用户状态,而最常用,也最简单的就是Cookie了,它由浏览器自动保存并在发送请求时自动附加到请求头中.尽管在现代W ...
- 转 DataGuard环境搭建 (一主一备一级联)
DataGuard环境搭建 (一主一备一级联) http://blog.itpub.net/30130773/viewspace-2116985/ 1.--------- primary_role / ...
- c++11 右值的学习
从4行代码看右值引用 概述 简单的左值和右值的判断就是 看是否可以取得地址 可取得地址 是左值 不能则 是右值! c++98/03中的左值引用是这样的: int i = 0; int& ...