目录
1. 声明变量
函数内部声明全局变量,不加var
/*
这里有一个地方需要注意,函数内部声明变量的时候,一定要
使用var命令。如果不用的话,你实际上声明了一个全局变量
*/
var a = function () {
//声明全局变量
b = 'zhang'
}
// 一定要先执行一下a函数,让变量b存到内存中
a()
// 外部能够调用
console.log(b)
变量的特性及原理
function getNum() {
var n = 100;
nAdd = function () {
n += 1
console.log(n)
}
console.log(n);
}
/* 当一个函数被执行时,它的局部变量通常
存储在函数的执行上下文中。一旦函数完成执行,
其执行上下文通常从调用堆栈中删除,并且局部变
量不再可访问,有效地被“销毁”或由垃圾收集器清理。 */
// 函数执行完后变量n,立即被销毁,减少内存的消耗
getNum(); // 100
getNum() // 100
2. 闭包
什么闭包: 闭包就是能够读取其他函数内部变量的函数
// 闭包会使得函数中的变量都被保存在内存中,不会被立即销毁
function aa() {
n = 1
// 闭包特点:内部函数要使用外部函数的变量,并且外部函数返回内部函数的过程
function bb() {
n += 1;
console.log(n);
}
return bb
}
a = aa()
// 使用内部函数
a() // 2
a() // 3
3.this关键字
js的各种事件会使用到this关键字,this的指向:监听函数内部的this指向触发事件的那个元素节点
1.事件中的this
<body>
<button id="zhang">点我</button>
<script>
var obj = document.getElementById("zhang");
obj.onclick = function () {
// this指向obj
console.log(this.id)
console.log("哈哈,你还真点,你输了!!!");
}
</script>
</body>
2.闭包中的this
// 第一种
var name = "我被引用了";
// js中把字典作为对象
var obj = {
name : "我没有被引用",
getName : function(){
return function(){
// 要引用内部变量,直接写name
return this.name;
};
}
};
alert(obj.getName()());
//第二种
var name = "我被引用了";
// js中把字典作为对象
getName =function(){
var name = "我没有被引用"
return function(){
// 要引用内部变量,直接写name
return this.name;
};
};
alert(getName()());