美文网首页
使用闭包突破作用域的约束

使用闭包突破作用域的约束

作者: 33d8e4ec2cc9 | 来源:发表于2016-06-23 22:35 被阅读36次

ruby里作用域之间宛如身处两个异世界,当你试图穿过一个作用域的时候,变量会立即失效,而不是像在js里面你定义一个全局变量之后,任何function里面都能调用

aa = 'success!' 
class MyClass
  def my_method
    puts aa
  end
end

MyClass.new.my_method
=> NameError: undefined local variable or method `aa' for #<MyClass:0x007fb67a84ab88>

你期望能在这个方法里面能够输出success!,然而却并不能,aa这个变量和MyClass这个class还有my_method这个方法身处三个作用域,他们之间无法互相取变量,那怎么样才能让他们共享一个作用域呢。

aa = 'success!'
MyClass = Class.new do
  define_method :my_method do 
    puts aa
  end
end

MyClass.new.my_method
=> 'success!'

用Class.new代替class,用define_method代替def,此时他们便处于一个作用域中了!

为什么会想到写这个,主要是在写招采外网动态标题方法的时候碰到的一个问题。

相关文章

  • 使用闭包突破作用域的约束

    ruby里作用域之间宛如身处两个异世界,当你试图穿过一个作用域的时候,变量会立即失效,而不是像在js里面你定义一个...

  • 作用域和闭包

    目录 概述 作用域编译过程词法作用域全局作用域函数作用域 闭包循环和闭包闭包的用途性能 总结 概述 作用域和闭包一...

  • 2018-01-07 关于javascript闭包和作用域的理解

    关于 javascript 闭包的一些思考 作用域 词法作用域 函数作用域 块作用域 闭包 什么是作用域? 作用域...

  • 所谓闭包

    所谓闭包 Closures (闭包)是使用被作用域封闭的变量,函数,闭包等执行的一个函数的作用域。通常我们用和其相...

  • javaScript门道之闭包

    闭包的学习路径:变量的作用域 -> 闭包的概念 ->闭包的应用 1.变量的作用域 变量的作用域分为作用于全局和作用...

  • 14.JS基础之作用域与闭包

    作用域: 全局作用域 函数作用域 块级作用域(ES6新增) 常见的闭包有:作为函数返回值的闭包与作为函数参数的闭包...

  • js作用域、闭包

    闭包 闭包作用 全局 局部 作用域链

  • 执行环境 & 作用域 & 闭包

    执行环境 & 作用域 & 闭包 执行环境 , 作用域 , 闭包 , 闭包应用 执行环境 执行环境定义了 当前环境的...

  • 闭包

    一个函数 , 使用外面的变量 , 就是闭包 .这个函数和变量共同叫做闭包 .闭包就是作用域的特殊使用方式

  • JS总结:(二)执行上下文、this、作用域与闭包

    知识点: 1、执行上下文 & 作用域链 & 变量提升 2、this 的七种使用场景 3、作用域与闭包:什么是闭包,...

网友评论

      本文标题:使用闭包突破作用域的约束

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