代碼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沒有定義而運行出錯。