1.js是浏览器解释执行的脚本语言
2.js是先 预编译 后 执行 (浏览器js解释器解析)
3.代码执行当前执行环境的活动对象中
4.javascript 按模块执行,同时又遵循HTML文档流的解析顺序
5.js没有快作用域的,if-else等条件语句内的变量可以被外界访问
if( true ){
var num = 'hanyan'; } console.log( num ); //可以访问到if里的num hanyan
6.一些情况下,代码会提到作用域最前面
第一种: 用var声明的变量
var str = 'advance';
第二种:函数声明式
function advance(){};
例子:
demo(); //hanyan
function demo(){ console.log( 'hanyan' ); } demo(); //demo is not a function var demo = function(){ console.log( 'hanyan' ); };
执行编译:
**代码书写**
fn();
var fn = function(){};
var num = 42; demo(); function demo( data ){ if(false){ goo = 1; }else{ var goo = 2; } console.log( data ); }; **预编译过程** var num,fn; //underfined function demo( data ){ var goo; //underfined if( false ){ goo = 1; }else{ goo = 2; } console.log( data ); }; fn(); fn = function(){}; num = 42; demo();
goo的搜索过程
1.当前作用域内是否有 var goo的定义。
2.函数形式参数是否有使用 goo名称的。
3.函数自身是否叫做 goo。
4.回溯到上一级作用域,然后开始搜索
7.解析各种浏览器网页中的JS执行顺序(麻蛋麻烦上地址)
[JavaScript 全面解析各种浏览器网页中的JS 执行顺序](http://www.jb51.net/article/17261.htm)
[Javascript代码在页面加载时的执行顺序介绍](http://www.jb51.net/article/36330.htm)
8.改变js在页面的执行顺序
1.利用onload
2.IE中可以利用defer
3.利用Ajax