社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Jquery

为什么不同的jQuery文件在由同一个文档加载时不能一起工作?[副本]

Mark Almighty • 4 年前 • 322 次点击  

我的问题的一个例子可以用以下三个文件复制。。。

index.htm(索引):

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="jquery-3.4.1.min.js"></script>
<script type="text/javascript" src="script1.js"></script>
<script type="text/javascript" src="script2.js"></script>
</head>
<body>
Hello, world!
</body>
</html>

$(function() {
    const THE_TEXT = 'This is THE_TEXT';
});

脚本2.js:

$(function() {
    function log_THE_TEXT() {
        console.log(THE_TEXT);
    }

    log_THE_TEXT();
});

我希望在加载页面后在控制台日志中看到“这是_文本”。相反,出现了以下错误:

ReferenceError:未定义脚本2.js:6:3

jQuery.Deferred exception:未定义\文本记录\文本@ http://example.com/js-test/script2.js:6:3


更新 :感谢所有建设性地指出这是一个范围问题的人。你们都是最棒的!我觉得有点傻,因为我已经理解了PHP的作用域很多年了,但是现在我开始使用Javascript/jQuery,并且用$(function())开始这两个文件,这并没有让我明白。。。就像我在jQuery上的Udemy课程教给我的。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54324
 
322 次点击  
文章 [ 4 ]  |  最新文章 4 年前
Johnny Zabala
Reply   •   1 楼
Johnny Zabala    4 年前

这与jQuery无关,只与JavaScript作用域有关。

在第一个脚本中,您将在函数中声明一个变量,因此它是该函数作用域的一部分。在第二个脚本中,您试图从另一个函数访问变量。此函数不能访问其他函数的作用域。它们是独立的功能,具有独立的范围。

有办法做到吗?

在脚本1中,在全局范围内定义变量:

const THE_TEXT = 'This is THE_TEXT';

范围中的变量甚至认为它不是窗口对象的一部分。

enter image description here

Nathaniel Fargo
Reply   •   2 楼
Nathaniel Fargo    4 年前

其实很简单,都和范围有关。函数中定义的事物 不能 在JavaScript的函数之外使用。
例如,范围如何工作的一种简单方法

function foo() {
    var bar = true;
    console.log(bar); // true
};
console.log(bar); // Error

只需像这样定义变量

var bar = true;
function foo() {
    console.log(bar); // true
};
console.log(bar); // true

bar 是全球定义的!它可以在任何文件中使用!

TL;博士 外部 如果以后还打算使用这些函数 外部

rattybag
Reply   •   3 楼
rattybag    4 年前

https://www.w3schools.com/js/js_const.asp

var x = 10;
// Here x is 10
{
  const x = 2;
  // Here x is 2
}
// Here x is 10
Buszmen
Reply   •   4 楼
Buszmen    4 年前

这是因为

函数在JavaScript中充当闭包,从而创建一个作用域,以便(例如)不能从函数外部或其他函数中访问仅在函数中定义的变量

阅读更多关于 scope here .

window 全局对象:

脚本1.js

$(function() {
    window.THE_TEXT = 'This is THE_TEXT';
});

$(function() {
    function log_THE_TEXT() {
        console.log(window.THE_TEXT);
    }

    log_THE_TEXT();
});

…但是 using global variables is considered as a bad practice . 还有很多其他的方法,但这都增加了复杂性,这真的取决于你想要从长远来看实现什么。