HK&&CC JS学习:第一周——NO.2this
1)常用的命名规范:
aXXXX:aBtn 说明获取的是一组元素;--类数组
oXXX:oBtn 说明获取的是一个元素-》对象
对象有两个重要的特点:属性 和 方法;
属性和方法的区别:属性没括号 方法有括号
bxxx:bOk 代表布尔值 true、false
reg/re :代表正则;
str:字符串
ary/arr/array:数组
2)带var和不带var的区别:
带var:1)在全局作用域下,变量相当于window的全局属性 2)带var会进行预解释
不带var:1)相当于window的全局属性 2)重要:不带var不会进行预解释;
3)预解释无节操:
1)只对等号左边带var的声明,但不定义;
2)自执行函数不会进行预解释,只有执行到他的时候,声明+定义+调用同步完成
3)已经声明过的变量,不会进行重复声明
4)return后面的语句不会进行预解释,return下面的语句,虽然不执行,但会进行预解释;
5)条件判断语句中:无论条件是否成立,都会进行预解释
警示:不要在条件判断语句中,写函数的定义阶段
4)在预解释的时候,函数的优先级>变量
5)运算符的优先级:算术运算符》比较运算符》逻辑运算符》赋值运算符
所以,以后遇到赋值的时候,一定要加括号;
6)点击任何一个按钮的时候,弹出他对应的索引:
1)自定义属性解决方式->本质:把正确的i值保存到对象的私有属性上;
2)闭包-》本质:把正确的i值保存到不同的私有作用域中;
7)关于this的用法:
1.当元素身上的事件被触发的时候,会执行一个函数,函数中的this,指向当前这个元素
2.函数被调用的时候,看前面是否有点,点前面是谁,this就是谁;如果没有点,默认是被window调用的;
3.自执行函数中的this都是window;
8)内存和内存释放:
内存主要包含:堆内存和栈内存;
栈内存:全局作用域和私有作用域;
作用:提供了一个供JS代码执行的环境;里面放的是基本数据类型的数据;
堆内存:作用:就是用来存放引用数据类型的数据:
对象数据类型:存放的是属性名和属性值;
函数数据类型:把函数体中的所有JS代码,作为字符串存在堆内存空间中
内存释放:
堆内存的释放:让变量指向空指针;
var obj={key:value}; obj=null;
栈内存的释放:
全局作用域:形成:当浏览器加载完页面的时候,会形成一个供JS代码执行的全局作用域;
释放:关闭页面、关闭浏览器;
私有作用域:形成:函数被调用的时候;
一般情况下,当函数执行完成的时候,都会默认进行释放,但是两种特殊情况除外:
1)不释放:当函数体中的任何东西,被外面的变量或者其他东西占用的时候,该函数不释放;
2)不立即释放:当函数执行完成的时候,返回一个需要执行的函数;需要等待所有的函数都执行完成的时候,该函数才能释放;例如fn( )( )
一般有三种情况:
①函数执行返回了一个引用数据类型的值,并且在函数的外面被一个其他的东西接收了,这种情况下一般形成的作用于都不会被销毁;
②在一个私有作用域中给DOM元素的时间绑定方法,一般私有作用域不销毁;
③不立即销毁
9)上级作用域:跟函数在哪里调用无关,只跟该函数对应的堆内存在哪里开辟有关;
10)
++i:先++,再运算
i++:先运算,再++;再++的时候,只是自身的增加,跟运算无关;
..................................................................
例题:
var n=[12,34,56,8];
function fn(a){
a[0]=100;
a=[];
a[a.length]=300;
console.log(a);
}
fn(n);
function fn(a){
a[0]=100;
a=[];
a[a.length]=300;
console.log(a);
}
fn(n);