《JavaScript 高级程序设计》笔记 第7章及以后

第7章 函数表达式

  1. 匿名函数的name属性是空字符串;
  2. 闭包是函数:闭包是有权访问另一个函数作用域中变量的函数;(P181 副作用,解释了点击li弹出循环最后值的原因)
  3. 当某个函数第一次被调用时,会创建一个执行环境及相应作用域链,并把作用域链赋值给一个特殊内部属性[[scope]],使用this、arguments和命名参数来初始化函数的活动对象;
  4. 无论什么时候在函数中访问一个变量时,就会从作用域链中搜索具有相应名字的变量。一般来讲,当函数执行完毕后,局部活动对象就会被销毁,内存中仅保存全局作用域(全局执行环境的变量对象);
  5. 闭包不然:在函数内部定义的函数,会将外部函数的活动对象,添加到自己的作用域链中;
  6. 闭包的副作用:闭包只能取得外部函数中任何变量的最后一个值
function createFunctions() {var result = new Array()for(var i = 0;i < 10; i++){return[i] = function() {return i}}return result
}
// 每个函数的作用域链中都保存着createFunctions()函数的活动对象,它们引用同一个变量i
  1. 创建一个匿名函数,强制让闭包的行为符合预期:
function createFunctions() {var result = new Array()for(var i = 0;i < 10; i++){return[i] = function(num) {return function() {return num}}(i)}return result
}
//没有直接将闭包赋值给数组;
//定义了一个匿名函数,并将立即执行该函数的结果赋值给数组;
//匿名函数有参数num,也是最终函数要返回的值;
//在调用每个匿名函数时,传入变量i,函数参数是按值传递的,会将变量i的当前值传给num
//匿名函数的内部,又创建并返回了一个访问num的闭包
  1. 匿名函数的执行环境具有全局性,其this对象通常指向window:
var name = "The Window"
var obj = {name: "My Obj",getNameFunc: function(){return function(){return this.name}}
}
obj.getNameFunc()() // The Window
  1. JavaScript不会告诉你是否多次声明了同一个变量,遇到这种情况,它会对后续的声明视而不见;
  2. 用匿名函数来模仿块级作用域:
(function(){// 这里是块级作用域 
})()

错误写法:

function(){// 这里是块级作用域 
}()
错误: 函数声明后面不能跟圆括号

第8章 BOM

  • window对象
  • location对象
  • navigator对象
  • screen对象
  • history对象
  1. 尝试访问未声明的变量会抛出错误,但是通过查询window对象,可以知道某个可能未声明的变量是否存在:
var b = a //报错,这里a未定义
var c =  window.a // c的值是undefined

第9章 客户端检测

  • 能力检测:
    1) 先检测达成目的的最常用的特性(避免测试多个条件)
    2) 必须测试实际要用到的特性

第10~12章 DOM

  • NodeList是有生命、呼吸的对象,而不是在我们第一次访问它们的某个瞬间拍摄下来的一张快照;
  • 如果列表中只有一个节点,那么该节点的nextSibling和previousSibling都为null;
  • ownerDocument是所有节点都有的属性,指向整个文档的文档节点;

第13章 事件

  • 建议使用事件冒泡;
  • 事件处理程序中的代码在执行时,有权访问全局作用域中的任何代码;
  • 在HTML中指定事件处理程序的缺点:
    1)存在时差问题:用户可能在页面刚显示按钮时,就点击,如果点击事件是在按钮下方、页面的最底部定义的,就会引发错误,可以封装在try-catch块中;
    2)事件处理程序的作用域链在不同浏览器中可能会有不同效果;
    3)HTML和JavaScript紧密耦合;
  • 事件对象
    1) DOM中:event对象作为参数;
    2) IE中:event对象作为window对象的属性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[树形dp] Jzoj P1046 寻宝之旅

Description 探险队长凯因意外的弄到了一份黑暗森林的藏宝图&#xff0c;于是&#xff0c;探险队一行人便踏上了寻宝之旅&#xff0c;去寻找传说中的宝藏。藏宝点分布在黑暗森林的各处&#xff0c;每个点有一个值&#xff0c;表示藏宝的价值。它们之间由一些小路相连&#xff0…

javascript --- 使用语法糖class定义函数

本文讨论的是通过class声明的函数,有什么特点,或者说是指向了哪里. class A() {} // A是一个类// 要看class声明的函数指向哪里,只需将其[[Prototype]]属性打印到控制台,下面看看A和它的原型对象的指向 // 注:[[Prototype]]属性通过__proto__访问 console.log(A.__proto__…

前端知识点整理收集(不定时更新~)二

目录 require() 加载文件机制 线程和进程 线程 单线程 Nodejs的线程与进程 网络模型 初识 TCP 协议 三次握手 I/O I/O 先修知识 阻塞与非阻塞 I/O 同步与异步 I/O Git 基础命令 分支操作 修改远程仓库地址 远程分支获取最新的版本到本地 拉取远程仓库指定分支…

SpringBoot零基础入门指南--搭建Springboot然后能够在浏览器返回数据

File->new Project 修改默认包名&#xff0c;根据自己的喜好修改 选择初始化需要导入的包&#xff0c;尽量不要一开始就导入很多&#xff0c;特别是数据库&#xff0c;不然启动可能会有问题&#xff0c;创建好的目录如下&#xff1a; 配置文件写在application.properties下&…

JavaScript算法相关

1. 排序 1.1.冒泡排序 每一轮比较&#xff0c;从左至右交换相邻&#xff0c;每轮结束&#xff0c;最后一个为最大下一轮&#xff0c;需要比较的个数 - 1 j < len - i (范围动态缩小)共 len - 1 轮比较 function bubbleSort(arr) {var len arr.length;for (var i 1; i &…

javascript --- 编程风格

字符串 const a foobar; const b foo${a}bar; // 此处是反引号(tab键上) const c foobar;解构赋值 const [first, second] arr;function getFullName({ firstName, lastName }) { }function processInput(input) {return { left, right, top, bottom }; } const { left…

$ - 字符串内插

$ 特殊字符将字符串文本标识为内插字符串。 内插字符串是可能包含内插表达式的字符串文本。 将内插字符串解析为结果字符串时&#xff0c;带有内插表达式的项会替换为表达式结果的字符串表示形式。 此功能在 C# 6 及该语言的更高版本中可用。 与使用字符串复合格式设置功能创建…

数据结构基础知识

排序 参考&#xff1a;https://www.bilibili.com/video/av38482633/?spm_id_fromtrigger_reload 目录 排序 插入排序 直接插入排序 折半排序 希尔排序 ​ 交换排序 冒泡排序 快速排序 选择排序 堆排序 流量单位计算 什么是计数排序 复杂度分析&#xff1a; 什…

linux中安装软件,查看、卸载已安装软件方法

各种主流Linux发行版都采用了某种形式的包管理系统&#xff08;PMS&#xff09;来控制软件和库的安装。 软件包存储在服务器上&#xff0c;可以利用本地Linux系统上的PMS工具通过互联网访问。这些服务器称为仓库。 由于Linux发行版众多,目前还没有统一的PMS标准工具。 这里分别…

html5 --- 使用javascript脚本控制媒体播放

H5中的标签(<audio…/> 和 <video…/>)对于JS中的HTMLAudioElement对象和HTMLVideoElement对象 对象有以下几个方法: play(): 播放 pause(): 暂停播放 load(): 重新装载音频、视频 canPlayType(type): 判断该元素可播放type类型的音频、视频 下面是一个简单的音乐…

在js中if条件为null/undefined/0/NaN/表达式时,统统被解释为false,此外均为true

Boolean 表达式 一个值为 true 或者 false 的表达式。如果需要&#xff0c;非 Boolean 表达式也可以被转换为 Boolean 值&#xff0c;但是要遵循下列规则&#xff1a; 所有的对象都被当作 true。当且仅当字符串为空时&#xff0c;该字符串被当作 false。null 和 undefined 被当…

ES6专题——整理自阮一峰老师的ECMAScript 6入门

这里我仅仅是记录了那些我认为值得注意的ES6知识点&#xff0c;详细版请挪步https://es6.ruanyifeng.com/#docs/let let和const命令 let声明的变量只在它所在的代码块有效。 var a []; for (let i 0; i < 10; i) {a[i] function () {console.log(i);}; } a[6](); // 6 …

开发测试比

1.服务器已经开启了CORS跨域支持 浏览器有同源策略限制&#xff1a;协议、域名、端口号其中无法向非同源地址发送ajax请求 跨域解决方法&#xff1a;JSONP&#xff08;只支持get不支持post&#xff09;&#xff0c;不是ajax 凡是有src属性的标签都有跨域能力 前端定义一个处理…

map函数用法详解

map函数是Python内置的高阶函数&#xff0c;它是一个典型的函数式编程例子。它的参数为: 一个函数function、一个或多个sequence。通过把函数function依次作用在sequence的每个元素上&#xff0c;得到一个新的sequence并返回。注意&#xff1a;map函数不改变原有的sequence&…

2018暑假集训测试六总结

拿到试题没几分钟&#xff0c;就有人说会做T1QAQ。第一题感觉似曾相识&#xff0c;其实不同。梳理出本质后发现有两个限制&#xff0c;便想用枚举递推来快速求解&#xff0c;发现要么是不会推&#xff0c;要么是时空超限&#xff0c;不会优化。期间也想过通过离线做&#xff0c…

css3 --- 使用媒体查询进行响应式布局

css3引入media,可以根据设备特性进行不同的布局, 本文展示的是根据不同屏幕的宽度进行不同的布局,代码如下: <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title> 针…

node项目正常启动后不能访问(防火墙未放行端口)

今天打开个人站点&#xff0c;发现登陆不了&#xff0c;原以为是pm2的问题&#xff0c;先停了pm2用node app.js的方式运行后端代码&#xff0c;项目能正常启动但是依然不能登陆。 1 检查ecs的安全组规则&#xff0c;node项目端口3000、8888是否放行 2 确认node正常运行 输入…

[转载]dbms_lob用法小结

http://blog.sina.com.cn/s/blog_713978a50100prkt.html CLOB里存的是2进制 判定长度 DBMS_LOB.GETLENGTH(col1)获取文本 DBMS_LOB.SUBSTR(col1,n,pos)DBMS_LOB.SUBSTR(col1,10,1)表示从第1个字节开始取出10个字节 DBMS_LOB.SUBSTR(CLOB_VAR,32767)表示截取CLOB变量保存的全…

javascript --- 利用节点关系访问HTML元素

<input type"button" value"父节点"onclick"change(curTarget.parentNode);" /><input type"button" value"第一个"onclick"change(curTarget.parentNode.firstChild.nextSibling);" /><input typ…