《悟透javascript》笔记

来源:互联网 发布:海岛奇兵英雄升级数据 编辑:程序博客网 时间:2024/06/05 02:38
  1. “123”==123结果为true,但是“0123”==0123为false因为js将0开头的整数常量当作8进制处理,所以后面的0123是八进制数。
  2. 数据分为简单数据和复杂数据。简单数据只有undefined、null、boolean、number、string,复杂数据只有object。
  3. 代码只体现为一种形式--function。
  4. js执行引擎并非一行行的分析和执行代码,而是一段段分析执行的。在同一段的程序分析执行中,定义式的函数语句会被提取出来优先执行,然后才按顺序执行其他语句。如下myfunc()函数语句先被提取出来优先执行,因此而覆盖了输出“1”的方法体。
    function myfunc(){    alert("1");}myfunc();     //输出“2”function myfunc(){    alert("2");}myfunc();    //输出“2”
    对比下面的代码
    var myfunc = function(){    alert("1");    //输出“1”}myfunc();     myfunc = function(){    alert("2");   //输出“2”}
  5. 第4条笔记所说的即为js的“预编译”,同时js还会预编译var变量初始化为undefined,以提高js的执行效率。
  6. 未用var定义的变量为window对象的属性,使用了var定义的变量为window作用域的一个变量。如果在全局作用域内写js代码,则有无var并无操作结果上的差别,但是如果涉及到如函数内部变量定义与外部相同时就要注意避免如下代码错误。myfunc()中第一行意图是输出“德邦总管”,但是由于js预编译,把myfunc当作代码段来执行,由于第8行出现了var yourName = "阿卡丽",根据第5条笔记,js会把yourName预编译为underfined。
    var yourName = "德邦总管";myName = "邪恶小法师";function myfunc(){    alert(yourName);           //输出“undefined”    alert(myName);             //输出“卡特琳娜”    var yourName = "阿卡丽";    myName = "卡特琳娜";    alert(yourName);            //输出“阿卡丽”    alert(myName);             //输出“卡特琳娜”}myfunc();



  7. 未完待续.......
原创粉丝点击