Javascript 函数及作用域
形参 实参
作用域
域解析
脚本语言生成之后过度 生成原理
经过预处理以后 生成什么样的函数代码
闭包 有什么用处 深入的东西
argument
函数 涉及的意义就是为了是实现代码的复用
把特定功能的打包 放在一起 下次使用的时候只要调用包裹就可以了
这就是所谓的函数
具体看下函数如何实现代码的复用
每天十点 给自己打鸡血
函数的语法
关键字 function 代表我后面的就是函数了
不好意思 现在我要展现真正的技术了
名称
后面跟小括号
小括号后放参数 参数有什么用的
然后就是执行的语句
function 函数(参数){
执行语句
}
多次使用 直接调用
执行函数一定要带上括号 函数(参数)
作用域 可访问变量的集合
定义一个变量 这个变量可以被使用的地方
定义一个变量 a = 10
只是以函数划分 分为两个
全局作用域 局部作用域
全局变量 局部变量
所有地方都能被访问到
局部变量只能在定义函数的内部访问到
在函数体外定义的变量 全局变量
函数内部定义的变量 局部变量
函数闭包
局部变量 其次实现具有全局变量的生命周期
function 里面再来个function
function add(){
var count = 0
plus : function(){
}
}
js 基本上所有东西都是对象
类和对象
对象的存储机制
增删改查
系统提供很多很实在的对象
系统打包了很多库供我们使用
变量 var
函数 function 一堆语句的集合
对象 其实就是一堆变量加上一堆函数的集合
很多时候 js就是把一些基本的因素进行封装
对象的创建 其实就是一个字典 包含key 和 value
var obj = {
a : 1,
b : 2,
'first name' : 'lirui'
}
new Object()
也可以创建一个空对象
属性名:属性值
属性名中间有特殊字符的必须加上引号
对象属性的基本操作 增删改查 遍历
必须写引号的属性 必须使用[]来获取 obj['first name']
delete obj.a 删除操作
为了区分函数和类
不能使用局部变量来定义
function PersonClass(){
this.name = "xiaoming"
}
es6使用 class来定义一个类
class personCla {
constructor(name) {
this.name = name
}
}
命名空间
widnow.location 完整的网址
浏览器 多线程
解析js UI渲染 浏览器 定时器的线程 各种轮询等
在处理js这件事情上 是单线程的
js单线程 是什么概念呢。只有一个线程去处理和js相关的事情 排队
编程的时候方便一点 多线程会复杂很多
我们有一张银行卡。我要给银行卡充钱 我老婆去银行卡取钱
如果是多线程 两个动作发生就会出现问题
如果是单线程就没有任何问题
Dom树 生成dom树 第一步 添加dom树的节点
一直添加 继续添加 哎 发现 有个script 引用外部文件
dom树就卡住了 开始下载外部文件到本地
下载完成以后开始用js解析器对下载的脚本进行解析
这时候js脚本就已经开始执行了
执行完成之后继续执行dom树
一直到dom树生成完毕为止
解析完成 开始展示给用户看
展示给用户的时候还有一些文件在下面
比如一些图片下载
等待文件下载完成。就结束了
页面载入完成进入
延迟加载
异步加载
怎么去操作Dom树
删除节点
removeChild
添加节点
appendChild
自己删除自己
寻找父节点删除自己
var div2 = document.getElementById("div2")
div2.parentNode.removeChild(div2)
通过获取节点,然后修改节点属性
var div2 = document.getElementById("div2")
// div2.parentNode.removeChild(div2)
div2.style.height = "300px";
div2.style.width = "5px";
JavaScript构造函数具备隐式返回操作
<script>
//构造函数一般使用大写字母开头
function Foo(name) {
this.name = name,
this.showName = function showName() {
console.log(this.name)
}
}
var obj = new Foo("卧槽");
obj.showName();
var obj2 = new Foo("卧槽2");
obj2.showName();
//使用系统方法定义对象
var obj = new Object();
obj.name = "name";
var obj2 = {
name: "name"
};
构造函数Foo的showName对象就被初始化了两次,而我们并不需要如此,可使用原型来处理
//原型 共享对象方法
Foo.prototype.showName = function showName() {
console.log(this.name)
}
这样obj 和 obj2就公用一个showName方法
</script>
![](https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1550046869549&di=1aa101a28a6f956ce63931a66bb2ecb4&imgtype=0&src=http%3A%2F%2Fwx3.sinaimg.cn%2Forj360%2F90f58663gy1fg6xj7eo85j20yg0yg4be.jpg)