JS学习笔记

来源:互联网 发布:mysql设置不区分大小写 编辑:程序博客网 时间:2024/06/04 22:41
变量命名规则:
 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!');
})();


闭包

一个函数可以访问另外一个函数作用域中的变量
好处:封闭性-起到一个保护变量的作用,不被垃圾回收




0 0
原创粉丝点击