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

ES6模块下DevTools无法访问全局变量的问题及解决方法

问题解决更新

看起来因为引入了另一个JS文件并使用ES6模块,DevTools的编译方式有所不同(后续需要深入学习)。原本以为是全局变量的那些变量在模块中并非全局变量,通过将变量赋值给window对象解决了该问题:

window.variable_name = variable_name

这样就能在DevTools中调用这些变量了。


原问题描述

正在做一个练习JS技能的项目,大部分功能已正常运行,但遇到了一个问题:

index.html中引入了app.js文件,用VS Code的Live Server运行时一切正常,但打开DevTools查看部分全局变量和函数时,会出现带有VM#:#引用的Uncaught ReferenceError: variable_name is not defined错误。

在此之前,一直可以在控制台中调用这些变量。共有12个全局变量,除了submit之外,其余都存在这个问题。

app.js 代码

import { autocomplete } from "./autocomplete.js";

// ######## GLOBAL VARIABLES ############
//------- Selectors ----------
const container = document.querySelector('.search-container');
const searchElement = document.getElementById('search');
const searchInput = document.querySelector('input[name="search-bar"]');
const submit = document.getElementById('search-bar');
const loader = document.querySelector('.loader');
const results = document.querySelector('.results');
const resetButton = document.querySelector('.reset');
const errorMessage = document.querySelector('.error');
const heart = document.querySelector('#favorite');

//------- Arrays & Objects ----------
let names = [];
let pokemon = {};
let bgImages = ["./resources/images/forest_background.jpg", "./resources/images/field.jpg", "./resources/images/galar-scenery.png", "./resources/images/night.jpg", "./resources/images/training.jpg", "./resources/images/poke-background.webp"];


//########## Grab & Store Pokemon Names for Autocomplete ##########
async function loadPokeNames() {

    try {
        const response = await fetch ('https://pokeapi.co/api/v2/pokemon?limit=250');
    
        if (response.ok) {
          const jsonResponse = await response.json();
        //   console.log(jsonResponse)
            for (const poke of jsonResponse.results){
               names.push(poke.name);
            }
        }
        // throw new Error('Request Failed!')
    
    } catch(error){
            console.log(error);
        }
}

//############ Search Function ###############
async function searchPokemon(e) {
    e.preventDefault();

    let pokeSearchValue = e.srcElement[0].value.toLowerCase();
    searchElement.hidden = true;
    loader.hidden = false;
    
    
    try {
        const pokeResponse = await fetch(`https://pokeapi.co/api/v2/pokemon/${pokeSearchValue}`);
        if (pokeResponse.ok) {
            const pokeJSON = await pokeResponse.json();

            // Assign Values to Pokemon Object
            pokemon.name = pokeJSON["name"];
            pokemon.img = pokeJSON["sprites"]["other"]["official-artwork"]["front_default"];
            pokemon.hp = pokeJSON["stats"][0]["base_stat"];
            pokemon.attack = pokeJSON["stats"][1]["base_stat"];
            pokemon.speed = pokeJSON["stats"][5]["base_stat"];
            pokemon.defense = pokeJSON["stats"][2]["base_stat"];
            pokemon.special_attack = pokeJSON["stats"][3]["base_stat"];
            pokemon.special_defense = pokeJSON["stats"][4]["base_stat"];

            console.log(pokemon);
            createPokeCard(pokemon);
        } else {
            throw new Error("Something Went Wrong.");
        }
    } catch (error) {
        loader.hidden = true;
        errorMessage.hidden = false;
        resetButton.hidden = false;
        console.log(error);
    }
    
}

// ####### Generates the Pokemon Card #########
function createPokeCard(object) {
    const pokeName = document.querySelector('#poke-name p');
    const pokeHP = document.querySelector('#hp');
    const pokeImg = document.querySelector('#poke-image img');
    const pokeAttack = document.querySelector('#attack .num');
    const pokeSpeed= document.querySelector('#speed .num');
    const pokeDefense = document.querySelector('#defense .num');
    const pokeSpecialA = document.querySelector('#special-attack .num');
    const pokeSpecialD = document.querySelector('#special-defense .num');
    const backgroundImage = document.querySelector('#poke-image')

    // Assign values to Results Card

    backgroundImage.style.backgroundImage = `url('${bgImages[Math.floor(Math.random() * 6)]}')`;
    pokeName.textContent = object.name;
    pokeHP.textContent = `${object.hp} HP`;
    pokeImg.src = object.img;
    pokeAttack.innerText = object.attack;
    pokeDefense.textContent = object.defense;
    pokeSpeed.textContent = object.speed;
    pokeSpecialA.textContent = object.special_attack;
    pokeSpecialD.textContent = object.special_defense;

    setTimeout(() => {
        loader.hidden = true;
        results.hidden = false;
        resetButton.hidden = false;
    }, 3000)
    

}

// ####### Resets Search & Card #########
function resetSearch() {
    searchInput.value = '';
    resetButton.hidden = true;
    results.hidden = true;
    searchElement.hidden = false;
    errorMessage.hidden = true;

    for (const att in pokemon){
        delete pokemon[att];
    }
}

//######## Favorite Functions ###########
function hoverFav() {
    this.src = '../resources/images/heartline-fill.png';
}
function hoverOutFav() {
    this.src = '../resources/images/heartline.png';
}


// ########### EVENTS ##############
window.onload = loadPokeNames;
autocomplete(searchInput, names)
heart.addEventListener('mouseenter', hoverFav);
heart.addEventListener('mouseout', hoverOutFav);
resetButton.addEventListener('click', resetSearch);
submit.addEventListener('submit', searchPokemon);

引入的script标签(路径正确)

<script src="./script/app.js" type="module"></script>

尝试在DevTools中调用全局变量时,出现了Uncaught ReferenceError错误。


内容的提问来源于stack exchange,提问作者jmmarketing

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:18:24