美文网首页
差点被JS作用域的问题打脸

差点被JS作用域的问题打脸

作者: 四月天__ | 来源:发表于2018-08-08 15:20 被阅读12次

话说今天帮同事画一个H5页面,看了一下UI,几张图片加文本还有几个按钮,看着就像分分钟可以搞定的样子,于是就接了下来
前面布局都写的很嗨皮,到最后给一个按钮绑定点击事件的时候,一直报错,提示方法未定义,一时间也是没明白,
代码是这样的:

 <div class="bottome">
        <span style="flex: 0.95">
          <span class="money">¥
            <span style="font-size: 20px">200.00</span>
          </span>
          <span class="promise">保证金</span>
        </span>
        <div class="baoming" onclick="signUp()">立即报名</div>
  </div>


<script type="text/javascript">

  window.onload = () => {
    function signUp() {
      console.log("报名。。。");
      document.getElementsByClassName("alert-wrap")[0].style.display = 'flex';
    }
  
  }

</script>

下面是报错提示:


image.png

后来我把方法放到外面正常了

<script type="text/javascript">

  window.onload = () => {
    function signUp() {
      console.log("报名。。。");
      document.getElementsByClassName("alert-wrap")[0].style.display = 'flex';
    }
  
  }

</script>

机智的我马上想到了是不是作用域的问题?经过验证还真是。

加上window.onload后改变了signUp()函数的作用域,使其成为内部函数,故而onclick=”signUp()“无法访问到这个函数,而放到外面signUp()是绑定在window上的,所以onclick=”signUp()“能够访问到。
其实就是window.onload = function(){};是一个作用域,当我们点击调用方法的时候是访问的全局作用域,结果当然是报错啦。
解决办法:
1、将绑定的方法写到全局作用域。
2、在window.onload 作用域内部给按钮绑定点击事件。

 const button = document.getElementsByClassName("baoming")[0];
    button.onclick = ()=>{
      console.log("报名。。。");
      const baoming = document.getElementsByClassName("alert-wrap")[0].style.display = 'flex';
    }

3、对象.函数(方法)

 const button = document.getElementsByClassName("baoming")[0];
    button.signUp =  ()=> {
      console.log("报名。。。");
      const baoming = document.getElementsByClassName("alert-wrap")[0].style.display = 'flex';
    }

相关文章

  • 差点被JS作用域的问题打脸

    话说今天帮同事画一个H5页面,看了一下UI,几张图片加文本还有几个按钮,看着就像分分钟可以搞定的样子,于是就接了下...

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • ES6语法笔记

    ES6语法 es5 -升级- es6(js打脸史) 作用域var afunction () {}a=1 //含义不...

  • JS作用域的练习

    Js作用域练习demo1 Js作用域练习demo2 JS作用域练习demo3 JS作用域练习demo4 JS作用域...

  • 第八节: JavaScript中this指向问题

    1. this指向问题 1.1 认识词法作用域 其实我们js中的作用域就是词法作用域,我们会发现词法作用域最重要的...

  • 第八节 JavaScript中this指向问题

    this指向问题 1.1 认识词法作用域 其实我们js中的作用域就是词法作用域,我们会发现词法作用域最重要的特征是...

  • 你不知道的JS-上卷

    作用域整体理解:JS作用域分为函数作用域,全局作用域,with和try catch形成的块级作用域。 JS引擎在编...

  • JavaScript散乱(四、细节)

    js高级 案例问题 作用域和作用域链 全局作用域也就是window和函数作用域,不考虑es6的块级作用域前提下,作...

  • js 闭包

    一、js 作用域 讲闭包首先就要理解 js 的作用域。再 ES5 中,js 有两种作用域,全局作用域和函数作用域(...

  • 2019-08-13JS里面的作用域Scope

    作用域指一个变量的作用范围。 JS的作用域 在JS中,有两种作用域 全局作用域直接编写在script标签中 JS代...

网友评论

      本文标题:差点被JS作用域的问题打脸

      本文链接:https://www.haomeiwen.com/subject/heqxbftx.html