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的功能代码 ...
随机推荐
- uoj#402. 【CTSC2018】混合果汁(主席树+二分)
传送门 我们先把果汁按照美味度排序,枚举\(d\),那么肯定是贪心的选择美味程度不小于\(d\)的且最便宜的果汁 发现\(d\)可以二分,那么在主席树上二分就可以了 据说还有整体二分的大佬然而我并不会 ...
- Java程序动态编译Java源文件
最近接触到公司一个项目,需要将生成的源码动态编译,记录下学习过程. 先贴出官网推荐写法: JavaCompiler.CompilationTask getTask(Writer out, ...
- SP14932 LCA - Lowest Common Ancestor
Description: 一棵树是一个简单无向图,图中任意两个节点仅被一条边连接,所有连通无环无向图都是一棵树.\(-Wikipedia\) 最近公共祖先(\(LCA\))是--(此处省去对\(LCA ...
- windows下指定端口号起步memcached
双击.exe启动的话,默认启动的端口是11211 ,要指定端口的话加 -p + 端口号,如: E:\tools\memcached-1.4.5-win32>memcached-1.4.5.exe ...
- Css+Html
CSS样式 <style type="text/css"> tt.tt1 { <style type="text/css"> p { b ...
- C#基础文件file的各种套路
File的各种套路 //创建一个文件 //File.Create(@"C:\Users\SpringRain\Desktop\new.txt"); //Console.WriteL ...
- File类。
File类: java.io.File 类.是文件和文件夹目录名的抽象表示形式. 可以用File对文件和文件夹进行 创建,删除,获取等操作. File类的一些静态成员变量: static String ...
- css position 定位模式
定位 定位模式: static relative absolute fixed 边偏移 :top bottom left right 一般的定位必须要有定位模式以及边偏移 static 静态定位 默 ...
- android :fragmentation使用中遇到的 NullPointerException
背景:fragmentation(单ACTIVITY+多个fragments)+brvah( recyclerView多级自定义菜单功能) 目的:实现 菜单栏的点击,fragment 显示相应的内 ...
- 20170405JDBC数据查询
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...