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的规划():避 ...
随机推荐
- NodeJS Addon 多线程
Mac版本客户端准备使用electron实现,需要对现有的C API的IM SDK 做NodeJS封装,提供Javascript接口. 使用Nan,遇到的问题主要是NodeJS是libuv defal ...
- plist文件里边如果最外层是字典的话,读出来是无序的。
如题. 要想使字典有序的话,可以用数组来存放字典,然后读
- 401 - 未授权:由于凭据无效,访问被拒绝”在iis的解决办法
1.打开"IIS信息服务管理器"-->选择你发布的网站-->选择功能视图中的"身份验证"-->右键匿名身份验证,选择"编辑" ...
- 【转载】SSM框架整合
http://blog.csdn.net/gebitan505/article/details/44455235/ 1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于20 ...
- MySQL Fabric和MyBatis的整合过程中遇到的问题
这是我昨天在整合MySQL Fabric和MyBatis时遇到的问题,花了大半天才解决的问题,解决的过程中在网上查找了很久,都没有找到解决的方案.现在记下来,希望能够帮助有同样问题的朋友.如果各位朋友 ...
- C#并行
/// <summary> ///该实现方式并不是最高效的 ///只是举个例子,说明用锁来保护共享状态 /// </summ ...
- docker搭建Hadoop集群
一个分布式系统基础架构,由Apache基金会所开发. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储. 首先搭建Docker环境,Docker版本大于1.3. ...
- HEAP CORRUPTION DETECTED :after Normal block 错误
http://blog.csdn.net/zhccl/article/details/7889590
- Codeforces Round #382 Div. 2【数论】
C. Tennis Championship(递推,斐波那契) 题意:n个人比赛,淘汰制,要求进行比赛双方的胜场数之差小于等于1.问冠军最多能打多少场比赛.题解:因为n太大,感觉是个构造.写写小数据, ...
- sublime Text 3 安装emmet
Emmet简介 Emmet是一个支持大部分流行文本编辑器的插件,能够极大得提高编写HTML和CSS的工作效率. 官网:http://emmet.io/ 在Sublime Text 3中安装 前提Sub ...