1 开头字母数字 “_”or "$"
2 变量名不允许空格
3 不能使用脚本语言中保留的关键字及保留符号作为变量名
4 变量名区分大小写(javascript是区分大小写的语言)
全局变量
方法外部声明
方法内部 没有加var关键字(必须执行过该方法)
局部变量
方法内部 使用var声明
数据类型:
基本数据:(Number Boolean String Undefined Null)
-Number:整数和小数、NaN、Infinty、-Infinty
注意:
1 除10进制还可以通过8进制和16进制表示
2 小数为浮点类型,最高精度为17位
if(a+b == 0.3)//不要这样测试
因为浮点数值最高精度17位,而是
0.30000000000000000004.
-Undifined 声明未赋值
-Null空值
-String 字符
-Boolean 布尔
引用数据类型:
Object类型(数组、对象、日期)
关键字
typeof操作符 判断数据类型
运算符:
==判断数值是否相等
=== 首先判断数值,其次判断类型
函数可以当成一种数据类型function
所以可以作为一个参数传入到函数中
三种定义函数的方式:
1 function语句形式
2 函数直接量形式
3 通过function构造函数形式定义函数
区别:
解释时机:
优先解释function语句形式其他两种顺序执行解释
性质:
function语句以及函数直接量都相当于静态,只执行一次
构造函数定义形式动态,每次都执行
作用域:
function语句以及函数直接量具有函数的作用域
构造函数定义形式具有顶级作用域,方法体内使用的变量必须是全局变量不能是局部
函数参数:
js中函数形参和实参数量多少可以不相等。参数比较的松散
实参:实际传入的参数,可以通过arguments.length,arguments[0]获取,只能在函数内部访问
形参:方法内定义传入的参数,可以通过方法名.length获得,或者推荐的arguments.callee.length
检查实参和形参个数是否相等
if(arguments.callee.length == arguments.length)
arguments.callee相当于函数自己本身
常用于递归调用
this:
指在运行时期基于执行环境所绑定的
this总是指向调用者windows.test()----this.k=20-----window.k=20
call apply:
1 绑定函数用于传递参数,调用
2 扩充作用域,好处就是参数和方法之间无耦合
执行环境、作用域链:
尽量减少全局的变量,因为它查找变量是从最小找到最大作用域,如果定义的变量在最大作用域内遍历的层级会增加,效率较低。
垃圾收集
标记法 技术法
边际变量的不同状态,收集,方法执行完毕,方法内变量进行回收
块级作用域
javascript没有块级作用域的概念!
只有垃圾回收机制,如果垃圾回收了,那么变量就无法找到,
没有回收,在方法体内变量都可以共用的,
function(){
for(int i=0; i<5; i++){
alert(i);
}
alert(i);//6 此时可以找到
}
匿名执行作用域
可以单独提出一块作用域,与外部代码无任何关联,使用()();()代表执行
(function(){
alert('i can execute directly!');
})();
闭包
一个函数可以访问另外一个函数作用域中的变量
好处:封闭性-起到一个保护变量的作用,不被垃圾回收