You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript函数内部获取外部变量的值?

在JavaScript函数内部获取外部异步变量(如response)的方法

嘿,我来帮你搞定这个问题!你现在的核心困扰其实是异步操作的执行顺序——fetch是异步请求,它的回调函数会在网络请求完成后才触发,而你当前的代码里不仅没正确把response传递给filter,还因为异步特性导致变量c没法及时拿到有效值。下面给你两种实用的解决方案:

方案一:在fetch的成功回调中直接传递response

既然fetch的then回调是请求成功后才会执行的,那我们直接在这里把拿到的response传给filter函数就行,这样filter内部和Test函数里的c都能获取到这个值:

<script>
Test();
function Test(){
  var c = "";
  function filter(data) {
    c = data;
    console.log("filter内的response数据:", data);
    console.log("Test函数内的c变量:", c); // 现在能正确拿到值了
  }
  var url = 'https://www.json-generator.com/api/json/get/coyqwdNpWq?indent=2';
  fetch(url, { method: 'GET', })
    .then(function(response){
      return response.json(); // 解析JSON格式的响应
    })
    .catch(function(error){
      console.error('请求出错:', error);
    })
    .then(function(response){
      // 请求成功后,把response传给filter
      filter(response);
      // 你也可以在这里直接处理response,比如打印指定字段
      console.log('请求成功,第一个数据的名称:', response[0].name);
    })
}
</script>

方案二:用async/await简化异步代码(更推荐)

ES2017引入的async/await能让异步代码的写法更像同步代码,避免嵌套回调的混乱。我们只需要把Test改成async函数,然后用await等待fetch的结果:

<script>
// async函数返回Promise,调用时可以用catch捕获全局错误
Test().catch(err => console.error('全局错误:', err));
async function Test(){
  var c = "";
  function filter(data) {
    c = data;
    console.log("filter内的response数据:", data);
    console.log("Test函数内的c变量:", c);
  }
  var url = 'https://www.json-generator.com/api/json/get/coyqwdNpWq?indent=2';
  try {
    // 等待fetch请求完成
    const response = await fetch(url, { method: 'GET' });
    // 等待响应解析为JSON
    const data = await response.json();
    // 拿到数据后调用filter
    filter(data);
    console.log('请求成功,第一个数据的名称:', data[0].name);
  } catch(error) {
    console.error('请求出错:', error);
  }
}
</script>

额外说明

你之前的代码里filter函数定义了data参数,但从来没有调用过它,而且因为fetch的异步特性,就算你在Test函数末尾打印c,也会得到空字符串——因为这时候请求还没完成,then回调还没执行,c还没被赋值。所以核心就是必须在异步操作完成后,再去处理拿到的response数据。

内容的提问来源于stack exchange,提问作者peterDalis. st

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:33:48