您的位置:首页 > Web前端 > JQuery

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

2017-10-20 14:35 766 查看
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函数误导了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐