首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的函数在严格模式(函数形式)中没有定义?

为什么我的函数在严格模式(函数形式)中没有定义?
EN

Stack Overflow用户
提问于 2018-03-09 09:54:04
回答 1查看 562关注 0票数 0

基本上,我有一个图片在我的页面,我可以点击打开它在一个模式。我以前使用的是“严格模式”(简单表单),但由于我试图兼容JSHint,所以我将其更改为函数表单。现在,我的函数openModal()变得没有定义。

代码语言:javascript
复制
<!-- Media part -->
    <ul class="netreviews_media_part">
        <!-- media 1 (picture) -->
        <li>
            <a data-type="image" data-src="https://www.expertisez.com/images/easyblog_images/511/Authentifier-un-sac-Chanel.jpg"
                       class="netreviews_image_thumb" href="javascript:" onclick="openModal(this);"
                       style="background-image:url('https://www.expertisez.com/images/easyblog_images/511/Authentifier-un-sac-Chanel.jpg');">&nbsp;</a>
        </li>
    <ul>

JS代码(部分)

代码语言:javascript
复制
(function () {
    "use strict";
    function openModal(identifier) {
    // stuff here 
    }
}());

小提琴:https://jsfiddle.net/7zd6mc65/2/

我似乎有点理解为什么它不工作,感谢火箭对这个问题(why does this code throw undefined in "strict mode")的回答:显然,由于“缺乏”上下文,我的函数上下文不再被定义。

不过,这里有两件事:

1-为什么简单的“字符串”形式(没有函数形式的“严格模式”)不会使它成为一个问题?我的openModal函数不会因为这个而变得没有定义。

我试着用openModal.call(这个)在HTML中,但是它并没有给我更多的结果(如答案所示,但我想我弄错了)。

我能做些什么来解决这个问题?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-09 09:58:42

这与严格的模式无关。函数声明的作用域与var变量相同。

你已经在生活中定义了openModal。变量openModal的作用域是该生命。它不是全球性的。

如果您想使它成为全局的,那么您需要显式地这样做。

,不要这么做。全局风险名称空间冲突。

代码语言:javascript
复制
window.openModal = openModal;

从90年代末开始,我们就有了addEventListener,因此您不需要将其表示为全局的,就可以将它用作事件处理程序。

代码语言:javascript
复制
(function () {
    "use strict";
    addEventListener("DOMContentLoaded", function () {
        var thumbs = document.querySelectorAll(".netreviews_image_thumb");
        thumbs.forEach(function (element) {
            element.addEventListener("click", openModal);
        });
    });
    function openModal(event) {
        var identifier = this;
    }
}());

旁白:

href="javascript:“

如果您不想链接到任何地方,那么就不要使用链接。使用<button type="button">代替。更好的做法是,链接一些有用的地方,并有一个服务器端回退。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49191004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档