JS中的變量與函數中的屬性的區別

代碼1:

<script type="text/javascript">
function Sing()  
    {  
    alert(author + ":" + poem);  //此函數內的變量是函數外定義的全局變量
    };  
    var author = "李白";  
    var poem = "漢家秦地月,流影照明妃。一上玉關道,天涯去不歸";  
    Sing();  //能正常運行
</script>

解析:
author和poem兩個變量被定義了,所以能在Sing()方法中被調用到,能正常運行。這是常見的一種方法。

代碼2

<script type="text/javascript">
function Sing()  
    { 
      with(arguments.callee)  
      alert(author + ":" + poem); //此函數內的變量是在函數定義之外賦值的 
    };  
    Sing.author = "李白";  
    Sing.poem = "漢家秦地月,流影照明妃。一上玉關道,天涯去不歸";  
    Sing();  //能正常運行
</script>

解析:
with 的作用 就是 暫時修改作用域鏈;
with(arguments.callee)
alert(author + “:” + poem);
等價於
alert(arguments.callee.author + “:” + arguments.callee.poem);

arguments.callee表示函數內的變量是在函數定義之外賦值的

代碼3

<script type="text/javascript">
function Sing()  
    {  
          alert(author + ":" + poem);  
    };  
    Sing.author = "李白"; //這是對函數一個屬性的賦值

    Sing.poem = "漢家秦地月,流影照明妃。一上玉關道,天涯去不歸"; 

    Sing();  //運行錯誤
</script>

解析:
如果沒有arguments.callee,Sing函數的屬性和函數裏的變量沒有關係,這裏就會因爲author和poem沒有定義而運行出錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章