gpt4 book ai didi

javascript - OpenLayers:为什么浏览器中的console.log可以找到该变量

转载 作者:行者123 更新时间:2023-12-03 02:01:07 24 4
gpt4 key购买 nike

我尝试从浏览器中console.log(ol_map),但它给了我一个未定义错误。该命令通过代码起作用。为什么会发生这种情况?

我使用 Symfony 框架和 Webpack Encore 来管理我的 Assets 。

This is a screenshot from the browser

文件:map.js

require('ol/ol.css');
require('../css/map.css');

import View from 'ol/view';
import VectorLayer from 'ol/layer/vector';
import TileLayer from 'ol/layer/tile';
import Map from 'ol/map';

var proj = require('ol/proj').default;
var ol_Map = require('ol/map').default;
//var ol_layer_Tile = require('ol/layer/tile').default;
var ol_source_OSM = require('ol/source/osm').default;
var ol_View = require('ol/view').default;
var coordinate = require('ol/coordinate').default;
//var VectorLayer = require('ol/layer/vector').default;
var VectorSource = require('ol/source/vector').default;
var GML = require('ol/format/gml').default;
var WFS = require('ol/format/wfs').default;

const ol_map = new Map({
target: 'map',
layers: [
new TileLayer({
source: new ol_source_OSM()
}),
//new VectorLayer({
// source: new VectorSource({
// format: new WFS(),
// url: 'http://environment.data.gov.uk/ds/wfs?SERVICE=WFS&INTERFACE=ENVIRONMENTWFS--864c72de-d465-11e4-855f-f0def148f590'
// })
//})
],
view: new ol_View({
//cordinates in ESPG3857
center: [-254382.41,7068896.29],
zoom: 6
})
});

console.log(ol_map);

文件:map.html.twig

{% extends '::base.html.twig' %}
{# STYLESHEETS-------------------------------------------------- #}
{% block stylesheets %}
{{ parent() }}
<link href="{{ asset('build/map.css') }}" rel="stylesheet" />
{#<link href="https://openlayers.org/en/v4.6.5/css/ol.css" rel="stylesheet" type="text/css"/>#}
{% endblock %}
{# PAGE CONTENT-------------------------------------------------- #}
{% block title %}OpenLayers example{% endblock %}
{% block body %}
<body>
<h2>My Map</h2>
<div id="map" class="map"></div>
<div class="arrow_box" id="popup-container" style="display: none;"></div>

<script src="{{ asset('build/map.js') }}"></script>
</body>
{% endblock %}
{# JAVASCRIPTS-------------------------------------------------- #}
{% block javascript %}
{{ parent() }}
{#<script src="https://openlayers.org/en/v4.6.5/build/ol.js" type="text/javascript"></script>#}
{% endblock %}

最佳答案

这是我上面评论的详细解释:

在 Webpack 中,每个 module (文件)导入和导出代码。当为浏览器转换/打包代码时,每个模块都包含在 closure 中。 ,确保内部代码不会泄漏到其他模块中。这非常重要,否则您始终必须确保不会意外覆盖其他模块中的变量或函数。

我猜您错误地认为您的顶级模块是不同的,并且内容被导出到浏览器的顶级(窗口)范围中。事实并非如此!

浏览器的控制台在主范围内工作,您的内部变量 ol_map 未知。当然,这个变量是在某个地方,但它是在某个函数内部的某个地方(或者甚至更深,在子子函数中)。也许你的变量也被 webpack 重命名(以减少代码占用),所以即使你在代码中添加调试断点,你也可能不会立即识别你的变量(但它就在那里!)。

但是,您可以从模块内部访问一些全局事物: window 是浏览器窗口对象。它代表了全局范围。例如,当您在控制台中编写 var x = 'hello'; 时,该变量 x 将成为 window 的属性。

因此,通过在代码中编写 window.ol_map = ol_map,您可以创建一个全局变量,然后您可以在浏览器和浏览器控制台中轻松访问该变量。

关于javascript - OpenLayers:为什么浏览器中的console.log可以找到该变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50022965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com