我不太清楚< script>之间发生了什么标签.例如,以下内容给出了Chrome中的参考错误和类型错误:
<html> <head> <script type="text/javascript"> T.prototype.test = function() { document.write("a"); } </script> <script type="text/javascript"> function T() {} var v = new T(); v.test(); </script> </head> <body> </body> </html>
但这样做:
<html> <head> <script type="text/javascript"> </script> <script type="text/javascript"> T.prototype.test = function() { document.write("a"); } function T() {} var v = new T(); v.test(); </script> </head> <body> </body> </html>
解决方法
上面的脚本在第一个例子中首先被执行,所以它不知道T,所以这个错误.
在第二个例子中,一旦脚本标记被执行,T就被很好的定义和知道.这是由于功能声明被提升到顶部,无论顺序是什么,它们始终可用.功能声明提升更为深入解释here
吊装后的第二个例子是:
var v,T = function(){}; /* using comma like this is short-hand for: var v; var T = function(){}; */ T.prototype.test = function() { document.write("a"); }; v = new T(); v.test();