JavaScript--Function, Variable作用域
2010-12-24 14:30
369 查看
一、在执行JavaScript语句前,首先将所有的declaration都提到其所在scope的顶部(注意:只提取declaration,不提取initialization)
也就是说,解释器在执行某个函数或者initialize某个变量前,首先将这些内容提取到其所在scope的顶部Demo function定义:
<html> <head> <script type="text/javascript"> varFunction("第一次调用");//第一次调用 var varBefore = "I'm varBefore"; varFunction("第二次调用");//第二次调用 function varFunction(invokeSeq){ alert(invokeSeq+": varBefore=" + varBefore); alert(invokeSeq+": varEnd=" + varEnd); alert(invokeSeq+": varMiddle=" + varMiddle); alert(invokeSeq+": varFunction=" + varFunction); return 1; } varFunction("第三次调用");//第三次调用 var varMiddle = "I'm varMiddle"; varFunction("第四次调用");//第四次调用 var varEnd = "I'm varEnd"; varFunction("第五次调用");//第五次调用 </script> </head> <body onload="message()"> </body> </html>
Demo variable定义:
<html> <head> <script type="text/javascript"> var varBefore; function varFunction(invokeSeq){ alert(invokeSeq+": varBefore=" + varBefore); alert(invokeSeq+": varEnd=" + varEnd); alert(invokeSeq+": varMiddle=" + varMiddle); alert(invokeSeq+": varFunction=" + varFunction); return 1; } var varMiddle; var varEnd; varFunction("第一次调用");//第一次调用 varBefore = "I'm varBefore"; varFunction("第二次调用");//第二次调用 varFunction("第三次调用");//第三次调用 varMiddle = "I'm varMiddle"; varFunction("第四次调用");//第四次调用 varEnd = "I'm varEnd"; varFunction("第五次调用");//第五次调用 </script> </head> <body onload="message()"> </body> </html>
二、如果函数定义和变量定义重名
Variable initialiazation> Function declaration> Variable declarationDemo function and variable定义:
<html> <head> <script type="text/javascript"> alert(typeof value);// function. (Function declaration > Variable declaration) alert(value);// function content. (Function declaration > Variable declaration) alert(value());// 1 // Both function and variable declaration will be hoisted to the top // of containing scope before javascript intepreter executes any code var value; function value(){ return 1; } value = 10000; alert(typeof value);//number. (Variable initialization > Function declaration) alert(value);// 10000. (Variable initialization > Function declaration) alert(value());// Error. Because value is a variable, not a function any longer </script> </head> <body onload="message()"> </body> </html>
问题:
如果 html 中,有多个 <script type="text/javascript"></script>,那么,这些<script></script>中的functioin, variable之间有关系吗?可以相互覆盖嘛?
相关文章推荐
- 面向对象的JavaScript-006-Function.prototype.apply()的3种作用
- 面向对象的JavaScript-007-Function.prototype.bind() 的4种作用
- JavaScript 中在 function() {} 前面加感叹号的作用
- [JavaScript] Script 中 function, variable 的定义会提升到函数执行前面;但是,function 中定义的 global variable 则不会被提升
- JavaScript 中在 function() {} 前面加感叹号的作用
- intermediate javascript: assign a function with its parameter to a variable and execute later
- javascript (function(){})()什么意思?有什么作用?匿名函数?
- javascript 在function 里return 重写function 而得到更多的作用域 闭包
- 面向对象的JavaScript-005-Function.prototype.call()的3种作用
- JAVASCRIPT基础学习篇(9)--ECMAScript Basic5(EcmaScript Function)
- Tip: execute ad-hoc JavaScript through eval function
- warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead.
- JavaScript作用域面试题
- JavaScript基础——变量、作用域和内存问题
- JavaScript学习--Item20 作用域与作用域链(scope chain)
- javaScript Function 函数的相关属性和方法
- function方法Javascript中函数定义方法比较
- javascript的立即执行函数(function(){…})()
- JavaScript eval() Function
- 有关javascript中replace(regexp,function)函数的解析