js基础2
什么是DOM?
DOM:文档对象模型(Document Object Model),又称为文档树模型。是一套操作HTML文档的API。
什么是文档对象模型?
DOM将html文档看成了一个对象,html文档中的所有内容都封装成了一个一个的对象。
因此我们学习DOM就是学习这些对象的属性和方法。
所有的内容:标签、属性、文本、注释,这些都被封装成了对象
什么是API?
api就是工具,做不同的事情需要不同的工具(api)
DOM:用来操作页面元素的一套API。BOM:用来操作浏览器一些行为的一套API。
DOM中的相关概念
文档:DOM会把整个html文档看成了一个对象,这个对象就document。
节点(Node):DOM会把页面中所有的内容都看成对象,我们把这些称为节点(节点都是对象)
节点有哪些?
标签节点、文本节点、属性节点、注释节点
元素(element):标签节点通常被称为元素,因为我们一般来说操作的都是元素(元素都是节点)
节点的层级关系:
父节点、子节点、兄弟节点
DOM可以做什么?
找对象、设置元素的属性、绑定事件、设置元素的样式、动态创建元素
console.log(cat);//第一次是以标签的形式展现的,刷新后按对象的形式展现
console.dir(cat);//直接以对象的形式展示出来。
修改DOM对象的属性: cat.src = "images/tiget.jpg";
在DOM中,script标签不能写到head标签里面,因为这个时候,页面还没有加载,
会出现获取不到页面中的元素的情况,因此我们一般会把script标签写到<./body>的上面
什么是事件?
事件就是文档或者窗口的一个特定的交互瞬间
事件的三要素:
事件源、事件名称、事件处理程序
标签自定义属性,无法通过DOM对象的属性来获取(在IE678中是可以获取得到的)。 想要获取标签的自定义属性,应该使用getAttribute方法
节点的属性
element.getAttributeNode("id");//获取到的是属性节点
nodeType:节点类型
1=元素节点 2=属性节点 3=文本节点
nodeName:节点名称
元素节点:标签的名称 文本节点:#text 属性节点:属性名称
nodeValue:节点的值
元素节点:null 文本节点:文本内容 属性节点:属性值
节点的层次
childNodes 子节点(包括元素节点和其他很多类型的节点)
children 子元素 (虽然不是DOM标准中的方法,但没有兼容性)
nextSibling 下一个兄弟节点
nextElementSibling 下一个兄弟元素 有兼容性问题
previousSibling 上一个兄弟节点
previousElementSibling 上一个兄弟元素 有兼容性问题
firstChild 第一个节点
firstElementChild 第一个子元素 有兼容性问题
lastChild 最后一个节点
lastElementChild 最后一个子元素 有兼容性问题
parentNode 父节点 没有兼容性问题
什么时候用style,什么时候用class?
如果某一个样式,一直都在变化,需要用style(动画)
如果需要设置的样式比较多的时候,用class
如果只需要设置一个样式,用style方便一点
使用class写的代码会比style更加好维护一点
克隆元素
cloneNode() 默认是浅复制,只会复制标签,不会复制内容
cloneNode(true) 深度复制,会复制标签和内容
cloneNode 只会在内存里面复制,并没有添加到DOM树上
预解析
预解析:js解释器在执行js代码的时候会有一个预解析的过程。它首先会把变量
和函数的声明提升到当前作用域的顶部,然后再开始执行代码。
作用域与作用域链
全局作用域:js编程环境的顶级对象是window对象的范围,被称为全局作用域,全局作用域
中的定义变量称为全局变量(函数外面)。
函数作用域:js的作用域是函数级的,在函数的代码块中被称为函数作用域,在函数作用域中
定义的变量被称为局部变量。函数在调用结束时,该函数作用域会被销毁,里面的所有局部变量也会被销毁。
js的函数可以嵌套,多个函数之间的层层嵌套构成了多个作用域的层层嵌套,被称为作用域链。 js作用域链的访问规则:如果当前作用域存在要访问的变量,则使用当前作用域的变量,否则到上一层的 作用域内进行寻找,直到全局作用域,如果找不到,则该变量未声明。
js函数内的变量无法在函数外面访问,但是可以在函数内部访问函数外的变量。 没有块级作用域
高阶函数
递归函数:函数自身调用自身(要有出口)
`function getFibonacci(n){
if(n == 1 || n == 2){
return 1;
}
return getFibonacci(n-2)+getFibonacci(n-1);
}
console.log(getFibonacci(12));`
回调函数:函数也是一种数据类型,因此函数也能当成参数进行传递
数据存储
简单数据类型:
Number、String、Boolean、Undefined、Null
复杂(引用)数据类型
Object、Array、Date、Math、自定义对象等
内存划分:
栈:内存比较小,但是运算速度很快
堆:内存比较大,但是运算速度相对较慢
数据存储:
基本(简单)类型,保存在栈里面。因为基本数据类型占用内存小。
引用(复杂)类型,保存在堆里面。因为占用内存比较多,因此,但是对象的引用保存在栈里面。
对于基本数据类型,复制的时候会把值复制一份给另一个变量,这个时候,两个变量num1和num2有了各自的值。互不干扰。
引用类型在复制的时候,仅仅会复制一份引用,但是两个引用指向的还是同一个对象,任何一个引用改变,
都会影响到对象。(来啊,互相伤害呀!)
使用基本类型作为参数的时候,形参的改变是不会影响实参的。
当参数是引用类型的时候,形参对对象做的改变,也影响到了实参,因为形参和实参指向的是同一个对象。
js基础2的更多相关文章
- js 基础篇(点击事件轮播图的实现)
轮播图在以后的应用中还是比较常见的,不需要多少行代码就能实现.但是在只掌握了js基础知识的情况下,怎么来用较少的而且逻辑又简单的方法来实现呢?下面来分析下几种不同的做法: 1.利用位移的方法来实现 首 ...
- js 基础
js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避 ...
- js基础练习二之简易日历
今天学到了js基础教程3,昨天的课后练习还没来的及做,这个是类似简易日历的小案例,视频还没听完,今晚继续...... 先看效果图: 其实做过前面的Tab选项卡,这个就很好理解了,通过鼠标放在不同月份月 ...
- [JS复习] JS 基础知识
项目结尾,空闲时间,又把<JS 基础知识> 这本书过了一遍,温故知新后,很多知其然不知其所以然的内容 豁然开朗. [1. 用于范围的标签] display :inline or bloc ...
- JS基础(超级简单)
1 JS基础(超级简单) 1.1 数据类型 1.1.1 基本类型: 1) Number:特别注意:NaN的检测方法:Nan!=NaN;或者使用isNaN方法 2) ...
- Node.js基础与实战
Node.js基础与实战 Node.jsJS高级进阶 NODE原理与解析 REPL交互环境 模块与NPM Buffer缓存区 fs文件操作 Stream流 TCP&UDP 异步编程 HTTP& ...
- js基础到精通全面教程--JS教程
适合阅读范围:对JavaScript一无所知-离精通只差一步之遥的人 基础知识:HTML JavaScript就这么回事1:基础知识 1 创建脚本块 1: <script language=”J ...
- JS基础知识总结
js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划() ...
- js基础篇——call/apply、arguments、undefined/null
a.call和apply方法详解 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象 ...
- js基础知识总结(2016.11.1)
js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避 ...
随机推荐
- word20161221
S/MIME, Secure Multipurpose Internet Mail Extensions / 安全多用途网际邮件扩展协议 SACL, system access control lis ...
- Java中的24种设计模式与7大原则
一.创建型模式 1.抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类.2.生成器模式(Builder patter ...
- AM335x kernel 4.4.12 i2c eeprom AT24c02驱动移植
kernel 4.4.12 i2c eeprom AT24c02驱动移植 在kernel make menuconfig ARCH=ARM 中打开: Device Drivers ---> Mi ...
- Win10搭建Linux开发环境之网络连接设定
一直想在家自己搭建一个LINUX服务器,好在上面安装个ORACLE数据库玩玩. 上次用了Ubuntu,结果ORACLE没装成功,现在换个思路,采用CentOS 7作为Linux服务器, 之后再进行构建 ...
- uiautomator-----UiWatcher监听器
一.UiWatcher类说明 1.Uiwatcher用于处理脚本执行过程中遇到非预想的步骤 2.UiWatcher使用场景 1)测试过程中来了一个电话 2)测试过程中来了一条短信 3)测试过程中闹钟响 ...
- html中嵌入swf文件的几种方法
转自:http://blog.163.com/yuki_1154/blog/static/7120277120126109315935/ 找了很久终于找到一个比较全面的: 1. object + em ...
- STM32F412应用开发笔记之三:SPI总线通讯与AD采集
本次我们在NUCLEO-F412ZG试验模拟量输入采集.我们的模拟量输入采用ADI公司的AD7705,是一片16位两路差分输入的AD采集芯片.具有SPI接口,我们将采用SPI接口与AD7705通讯.两 ...
- ATM+购物车
本次代码的实现用到了模块间的互相调用,这对于初学者而言有些难度,不过这也是我们必须要掌握的,在以后的大程序中,多个模块会让我们的代码看起来简洁明了,易排错 (本次代码只是简单的实现的基本的功能,其代码 ...
- CSS3 Loading(加载)动画效果
1.html 部分 <div class="spinner"> <div class="rect1"></div> < ...
- Ueditor之前后端源码的学习和简单的研究
这是我的项目目录 这里写图片描述 1.从访问路径http://localhost:8081/Test/_examples/simpleDemo.html,我们主要是要看看,富文本框被加载出来之前,会调 ...