【问题标题】:Redeclaration of const javascript with aJax call使用 aJax 调用重新声明 const javascript
【发布时间】:2017-11-13 17:18:19
【问题描述】:

我正在尝试加载页面,只是使用 jQuery 更改 .loadPage html 元素。我使用函数 loadPage(page) 调用新页面,并使用 aJax 加载页面。在我的 loadPage 函数中有这个:

$.ajax(`assets/views/${page}.html`)
    .done(html => {
        $('.loadPage').html(html);
    })
    .fail(() => {
        global.loadPage('error');
    });

但是当我尝试调用下面的页面时,这会在控制台上返回给我:SyntaxError: redeclaration of const perfil

perfil.html 页面

<script src="assets/js/ctrl/perfil.js" type="text/javascript"></script>

perfil.js 存档

const perfil = {
    load(){
        //more code here
    }
    //more code here...
}

当我使用 var 类型时,不会显示此错误,但我不想使用 var。

是什么意思?我必须使用 var 类型? 注意:当我尝试使用 let 时,发生了同样的错误。

【问题讨论】:

  • 是的。如果某些东西 是 变量,那么使用 const 是没有意义的。或者你可以Object.freeze 有一个恒定的行为
  • 所以我不能使用 const 来创建这个对象?所以我必须使用 var 或者干脆不使用任何人?
  • 主要问题是两次加载相同的代码。但是如果你写一个客户端项目,你应该记住,全局作用域是每个人都使用的,所以在其中声明变量时要小心
  • 或者你这样加载页面时没有包含所有资源......
  • 好的,乔纳斯,非常感谢!

标签: javascript jquery ajax


【解决方案1】:

您应该检查 perfil 是否已经存在,如下所示:

window.perfil = window.perfil || {
  load(){ /*...*/ }
};

或者你以某种方式只加载一次。

【讨论】:

  • 谢谢,这对我有用。窗口是全局范围吗?
  • @victor 之类的。
【解决方案2】:

相同的变量名作为函数参数出现,然后在函数体中再次使用 let/var 赋值重新声明。在 JavaScript 中不允许使用 let/var 在同一函数或块范围内重新声明同一变量。因此,您可以做的是,如果该变量不存在,那么您只需创建该变量即可。

如下图..

if (!perfil){
// do something
}

【讨论】:

  • 这对我不起作用。在控制台上:ReferenceError: perfil is not defined
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-25
相关资源
最近更新 更多