jQuery的ready函数不执行,报错:Unexpected end of input "",原因是js有语法错误,js文件中的所有东西即变量,一点也没有创建到内存中

来源:互联网 发布:cet6网络课程 编辑:程序博客网 时间:2024/05/16 09:04

jQuery的ready函数不执行,报错:Unexpected end of input "",原因是有语法错误





原因是js文件,语法错误,括号没有闭合。

js最后,括号,没有闭合。




总结:

js语法有问题,即js有语法错误的情况下(是js文件的语法错误,就报错,而不是某个函数的业务逻辑有错误),js文件中的任何一个函数都是不执行的。

想一想这是为什么呢?

因为js文件是页面加载完成后,要加入内存中的,即在内存中创建相关变量(js文件中任何都是变量,函数也是变量),即把一个js文件当成一个整体来执行,如果js有语法错误,则js文件的所有变量,都是没办法在内存中创建的,一个都不会创建。

那不是应该报错,找不到函数吗?为什么报错Unexpected end of input ""???

因为是我遇到了特殊情况,特殊在ready函数。如果我调用的是其他自定义函数,会报错,例如:

如果有如下js文件(语法有错误,test2函数没有闭合):

$(document).ready(function() {
    alert("aa")
});
function submitInfo(h) {
alert(1);
}
function test2(bt) {
alert(2)

如果我的一个html页面调用submitInfo方法,会报错函数不存在:


这就更验证了我的认识,整个js中的所有变量就没有加载到内存中去,即js报错的话,浏览器js解析器内核不会将该js的任何东西放入内存中的,所有就报找不到函数了。


有的同学会问了,JavaScript不是解释型语言吗,他怎么还有编译过程啊?但是这个并不是编译,而是运行,Java也是在运行的时候才将变量加载到内存中的,编译的时候是不加载到内存中的。


那么ready函数这个是怎么回事呢?为什么不报错函数不存在呢?

原因是:


这个错误,是在浏览器的js解析器内核,在加载js文件到内存时报的错(因为发现js有语法错误,没办法加载到内存中,所以JavaScript虽然没有编译阶段,但是在运行阶段会整体看一下语法的,即校验一下语法,如果语法有错误,js文件及js文件的代码是不会执行的,即不会将变量创建到内存中),而不是针对ready函数的,而是针对整个js文件的。是我被ready函数误导了。











阅读全文
0 0
原创粉丝点击