jQuery/JavaScript代码抽离为函数后item变量未定义问题求解
你给出的示例代码本身语法合规,不会抛出item未定义的错误,实际运行报错基本是你省略的代码中存在跨作用域引用的问题,常见原因如下:
- 你在事件处理函数的其他位置(如if分支内、else分支外)需要访问
item的值。原有写法中,var声明的item会变量提升到整个事件处理函数的作用域顶部,其他位置可以正常访问;抽离到myFun之后,item属于myFun的私有局部变量,事件处理函数的作用域下无法访问该变量,就会抛出未定义错误。 - 你实际写的
myFun代码中漏写了var item = 22的声明语句,直接对item赋值,若开启了严格模式(use strict),也会直接报变量未定义。 - 原有代码中你漏写了
var,item是隐式全局变量,抽离后myFun内部没有声明item,同样会触发报错。
如果需要在事件处理函数中继续使用item的值,可以把item作为函数返回值传递:
$(document).on("click", ".connect", function (ev) { if(/* 你的判断条件 */) { // 原有逻辑 } else { var item = myFun(); // 后续使用item的逻辑 } }); function myFun(){ var item = 22; item = item + 1; return item; }
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

