如何访问作用域函数

时间:2020-06-04 16:26:17

标签: javascript

我试图找到一种访问作用域函数的方法-以下面的代码为例:

(function() {
  one();
  console.log('IIFE END');

  function scoped() {
    console.log('scoped');
  }

  scoped();
})();

function one() {
  console.log('one');
}

 scoped(); // error

如何访问对函数的调用以防止错误?使用return关键字失败

2 个答案:

答案 0 :(得分:3)

您正在做的是或多或少说“我将钥匙锁在了车上。如何访问钥匙”。你不能您以一种无法检索它们的方式将它们锁定(好吧,除非您打碎了窗户,但我明白了)。如果您可以简单地打开门来获取钥匙,那将毫无意义地锁住汽车。

该“作用域”功能是锁定在汽车中的钥匙。

您要执行的操作是在该匿名函数之外(实际上在此函数之前)声明“作用域”。现在,您可以在anon函数内部和外部调用它。

您可以:

让范围;

...在匿名功能中...

{ 范围= {...某些功能}; }

const scope = {一些功能}

...在anon函数中

scope();

无论哪种方式,您都可以在anon函数之外调用“ scope()”。

我想我想补充一点,在JS中,几乎总是可以抓住不打算抓住的东西。您可能可以使用顶级“ this”之类的东西,或者只是命名您的anon函数(因此本质上创建的是类型为function的命名对象)并使用方括号表示法访问其成员。不过,您可能必须删除立即返回并在另一行代码中调用它(在函数声明之后)。

但这就是所有的黑客伏都教徒。你在打碎窗户。在日常工作中,您要说的是根据设计而定。

答案 1 :(得分:2)

根据您的灵活程度,您可以执行以下操作:

const scoped = (function() {
  one();
  console.log('IIFE END');

  function scoped() {
    console.log('scoped');
  }

  scoped();
  return scoped;
})();

function one() {
  console.log('one');
}

scoped(); // NO error :)

或者,如果您的函数返回保留给其他东西,请执行以下操作:

var scoped;  // If you don't want this pre-declaration, you can just use a global scope instead (e.g. window.scoped)

(function() {
  one();
  console.log('IIFE END');

  scoped = function() {
    console.log('scoped');
  }

  scoped();
})();

function one() {
  console.log('one');
}

scoped(); // NO error :)