别发连接吧   说说自己的理解就好..............
<script>
alert(cccc);
//  var cccc = 33333;
</script>//-------------------------------------------去掉注释 和 不去掉注释的结果不同  为什么了
<script>
function xx(){
alert(name)
alert(age)
}
xx();
</script>//--------------------------------------------name和age都不是js的关键字也不是保留字 但是为什么结果不一样了<script>
var t = 1;
function xx(){
alert(t);
// var t =2;
}
xx();
</script>//------------------------------------------------去掉注释 和不去掉注释的结果也不一样 why

解决方案 »

  1.   

    第一个问题和第二个问题是一样的,预编译时确定了变量已经定义但是执行是是逐行的为给变量赋值所以是undefined第二个问题貌似window有个name属性。。
      

  2.   

    同上js是以函数为作用域的,
    aa=3;
    function test(){
    alert(aa);
    var aa//=5;
    }
    test()
    alert('name' in window);
      

  3.   

    胡闹,这种非js标准的东西,研究有何意义。人家编engine的时候,爱咋办咋办,你管的着吗。
      

  4.   

    #1 已经解释滴很清楚了,就是变量声明及其作用域的问题,var 是变量声明符号,习惯上都是先声明变量,然后再调用,
    如果颠倒顺序,那么 undefined 是必然滴!当然,如果连 var 都没有的话,运行时异常就出来了!至于 alert(name); 其实就是 alert(window.name); // 这样就清楚多了!
    另,window 属性和对象都可以直接调用,但不推荐这么写,最好加上 window!window 属性列表:
    closed 获取引用窗口是否已关闭。 
    defaultStatus 设置或获取要在窗口底部的状态栏上显示的缺省信息。 
    dialogArguments 设置或获取传递给模式对话框窗口的变量或变量数组。 
    dialogHeight 设置或获取模式对话框的高度。 
    dialogLeft 设置或获取模式对话框的左坐标。 
    dialogTop 设置或获取模式对话框的顶坐标。 
    dialogWidth 设置或获取模式对话框的宽度。 
    frameElement 获取在父文档中生成 window 的 frame 或 iframe 对象。 
    length 设置或获取集合中对象的数目。 
    name 设置或获取表明窗口名称的值。 
    offscreenBuffering 设置或获取对象在对用户可见之前是否要先在屏幕外绘制。 
    opener 设置或获取创建当前窗口的窗口的引用。 
    parent 获取对象层次中的父窗口。 
    returnValue 设置或获取从模式对话框返回的值。 
    screenLeft 获取浏览器客户区左上角相对于屏幕左上角的 x 坐标。 
    screenTop 获取浏览器客户区左上角相对于屏幕左上角的 y 坐标。 
    self 获取对当前窗口或框架的引用。 
    status 设置或获取位于窗口底部状态栏的信息。 
    top 获取最顶层的祖先窗口。 window 对象列表:
    clientInformation 包含关于 Web 浏览器的信息。 
    clipboardData 提供了对于预定义的剪贴板格式的访问,以便在编辑操作中使用。 
    document 代表给定浏览器窗口中的 HTML 文档。 
    event 代表事件状态,如事件发生的元素,键盘状态,鼠标位置和鼠标按钮状态。 
    external 允许访问由 Microsoft® Internet Explorer 浏览器组件宿主应用程序提供的附加对象模型。 
    history 包含了用户已浏览的 URL 的信息。 
    location 包含关于当前 URL 的信息。 
    navigator 包含关于 Web 浏览器的信息。 
    screen 包含关于客户屏幕和渲染能力的信息。 
      

  5.   

    这是因为存在一种名为提升 的方法,该方法表示编译器会将所有的变量声明移到函数的顶部。
    -----<摘自ActiveScript3.0编程手册>
    关于"变量提升"
     程序中任何位置 声明的变量 都会自动提升到程序前边..但不会提升赋值...所以提升上来的变量都有一个默认的值--undefind..
    所以代码alert(cccc); 
    var cccc = 33333; 
    提升后变为:
    var cccc;// 声明
    alert(cccc)
    cccc=33333; //赋值
      

  6.   

    var t = 1; 
    function xx(){ 
    alert(t); 
    // var t =2; 

    xx(); 这个忘说了..如果是在函数中声明的变量就只提升到函数的顶部;如果去掉注释相当于
    var t=1;
    function xx()
    {
      var t;
      alert(t)
      t=2
    }