javascript - vue中变量与函数作用域的问题?
阿神
阿神 2017-04-11 12:08:53
[JavaScript讨论组]

我的vue项目中设置了两个路径,当路径为a时渲染A组件,当路径为b时渲染B组件。两个组件都需要可以访问并修改x变量。因此必须设置全局变量x和修改x变量的全局函数changeX。
因为项目比较小,我没有使用vuex,在网上搜了一下大家好像都是在Vue.prototype来定义全局函数,如何定义全局变量我没有找到。
无意中,我发现可以在根目录的index.html里,在(这是经过webpack打包后引入的文件)之前再放插入一个

在上面这种情况下,A组件和B组件中均可调用changeX函数,如:

//B.vue

上面这样是可行的,但是当全局函数和全局变量很多的时候放在index.html会很难看,于是我就写专门写了一个global.js文件,把x和changeX放到里面,然后用 //里面放x和changeX

这时再运行,控制台报错:“changeX不是一个函数”。

把同样的js代码从文件中引过来和直接放在

阿神
阿神

闭关修行中......

全部回复(3)
PHP中文网

于是我就写专门写了一个global.js文件,把x和changeX放到里面

既然楼主写了个global.js文件,就可以考虑遵循模块化的概念,使用import在各个组件中引用

下面从利于楼主理解的角度来说明,可能会存在一些不严谨的地方:

关于作用域问题,简单来说,你访问不到不是因为作用域不正确,而是打包工具通过修改变量名,包裹函数,等等多种方法帮你做到了隔离作用域,这样做的好处就是为了保证每个组件,每个模块都是相对独立的.

楼主如果感兴趣可以看看编译之后的代码,webpack之类的打包工具会讲每一个模块,包括入口文件(入口文件也被认为是一个模块)包裹成一个函数,函数返回值导出引用,所以不论你变量怎么写,看似作用域在window下,实际上已经被包裹进了函数中,这也是遵循了ES6_module或者commonjs模块的规范

推荐楼主使用import去引用global.js

如果楼主一定想要按上面的方法来实现,可以考虑把全局变量和方法挂载在window下,比如 window.xxx

巴扎黑

因为没有放出global.js文件,但是我猜测一下,你global文件输出文件时是不是使用了es6的export输出的变量,浏览器还是不支持这种写法的,你如果想输出一个变量,直接用最普通的写法

 <script>
      //定义全局变量与全局函数,在任意组件中都能访问与使用。

      let x 

      function changeX () {
      //对x进行操作
      }
 </script>

把script标签中写道global中,通过script标签引入就会成为全局变量

大家讲道理

是不是要拿vue的实例去获取呢 因为在vue中的数据或者是属性 都可以在vue的实例中获得的 好像

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号