javascript – coffescript范围误解

我试图了解coffeescript中的变量范围并稍微混淆,这是一个例子:

CoffeeScript代码

x = "localscope"
  z = () -> 
    x = "functionscope"
    console.log(x)

  console.log(x)

Javascript编译结果:

(function() {
  var x,z;

  x = "localscope";

  z = function() {
    x = "functionscope";
    return console.log(x);
  };

  console.log(x);

}).call(this);

正如我所知,在纯javascript中,函数中包含的所有变量都在同一范围内.所以我理解用coffescript编写的所有变量都是全局变量

解决方法

要在coffeescript中隐藏变量,您需要执行以下操作:

x = "localscope"
z = ((x) -> () -> 
    x = "functionscope"
    console.log(x)
)(x)
console.log(x)

产生的javascript是:

var x,z;

x = "localscope";

z = (function(x) {
  return function() {
    x = "functionscope";
    return console.log(x);
  };
})(x);

console.log(x);

在您的示例中,x不是最内层函数的本地,而是指您在开始时声明的相同“全局”x.通过“全局”,我的意思是在同一个文件中随处可访问.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...