相关问题
更多相关问题 →如何在网页中引入JavaScript?
在网页中引入JavaScript主要有三种方式:内联脚本、内部脚本和外部脚本。
-
内联脚本(Inline Script)
直接写在HTML标签的事件属性中,例如<button onclick="alert('你好')">点击</button>。这种方式适合极简单的交互,但代码混杂在HTML里,难以维护,不推荐在正式项目中使用。 -
内部脚本(Internal Script)
将JavaScript代码放在<script>标签内,并置于HTML文档的<head>或<body>中。例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>示例</title>
<script>
function greet() {
alert('页面加载完成');
}
</script>
</head>
<body>
...
</body>
</html>
内部脚本适合单个页面使用、代码量不大的场景。需要注意:如果脚本放在<head>中且需要操作页面元素,应使用window.onload或DOMContentLoaded事件,确保元素已加载完成,否则可能找不到元素。
- 外部脚本(External Script)
将JavaScript代码保存为独立的.js文件,再通过<script src="文件路径"></script>引入。这是最推荐的方式,因为它将结构(HTML)、样式(CSS)和行为(JS)分离,便于复用和缓存。例如:
<script src="js/main.js"></script>
外部脚本的src属性可以使用相对路径(如./js/main.js)、绝对路径或完整的URL(如CDN链接)。浏览器会按顺序加载多个外部脚本,默认情况下是同步阻塞的——即遇到<script>标签时,页面会暂停渲染,先下载并执行脚本,再继续解析后续HTML。
放置位置的建议
传统上,脚本放在<head>中会导致页面白屏时间变长,因为脚本下载和执行会阻塞渲染。因此,对于不需要在页面解析前执行的脚本,通常放在<body>标签的末尾(</body>之前)。这样页面内容先显示,脚本最后加载,用户体验更好。
现代增强属性
如果外部脚本不需要等待DOM解析,可以在<script>标签上使用defer或async属性:
- defer:脚本会延迟到文档解析完成后再执行,多个defer脚本按出现顺序执行。
- async:脚本下载与HTML解析并行进行,下载完成后立即执行,不保证多个async脚本的执行顺序。
常见错误提醒
- 忘记写</script>结束标签会导致脚本解析错误。
- 外部脚本文件路径写错(如大小写、目录层级)时,浏览器控制台会报404错误,页面功能失效。
- 在<head>中直接操作<body>里的元素会得到null,因为元素尚未解析。
如何确认引入成功
打开浏览器开发者工具(F12),切换到“控制台”(Console)面板。如果脚本中有console.log输出,能看到对应信息;若脚本语法错误,控制台会显示红色报错及行号。也可以直接在控制台输入脚本中定义的函数名,若能调用则说明脚本已正确加载。
HTML 是什么:如何编写并运行你的第一个网页
HTML(HyperText Markup Language,超文本标记语言)是用来描述网页结构的标记语言。它用一对对标签把内容标记成标题、段落、链接、图片等元素,浏览器读取这些标签后渲染出页面。如果你想快速看到效果,可以新建一个 .html 文件用浏览器直接打开,也可以打开 JSFiddle 这类在线编辑器,在 HTML 面板里写代码并即时预览。下面从最小可运行页面讲起,再到常用标签和在线工具的使用方式。
HTML 在网页中扮演什么角色
一个网页通常由三种技术分工完成:
| 技术 | 负责的内容 | 例子 |
|---|---|---|
| HTML | 结构:页面上有什么 | 标题、段落、图片、链接 |
| CSS | 表现:这些东西长什么样 | 颜色、字号、间距、布局 |
| JavaScript | 行为:交互和动态逻辑 | 点击响应、数据请求、动画 |
HTML 本身不是编程语言,它没有变量、循环、条件判断,只负责“标记结构”。浏览器解析 HTML 后生成页面骨架,再由 CSS 和 JavaScript 补充样式与行为。所以学网页的第一步通常是先写出一段结构正确的 HTML。
一个最小可运行的 HTML 页面
把下面这段代码保存为 index.html,双击用浏览器打开,就能看到一个带标题和段落的页面:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>我的第一个网页</title>
</head>
<body>
<h1>你好,HTML</h1>
<p>这是我用标签写出来的第一段文字。</p>
</body>
</html>
各部分的含义:
<!DOCTYPE html>:声明这是 HTML5 文档,浏览器据此进入标准渲染模式。<html>:整个文档的根元素,lang属性说明页面语言。<head>:存放不直接显示在页面上的信息,比如字符编码meta charset和浏览器标签页标题<title>。<body>:所有可见内容的容器。
输入这段代码、保存、在浏览器打开,预期结果是标签页显示“我的第一个网页”,页面正文显示一行大标题和一段文字。如果中文变成乱码,通常是漏了 <meta charset="UTF-8">,或者文件保存时用的编码与声明不一致。
常用标签:先把结构写对
掌握几个高频标签就能表达大部分基础内容:
<h1>一级标题</h1>
<h2>二级标题</h2>
<p>这是一个段落,段落之间会自动换行并留出间距。</p>
<a href="https://jsfiddle.net">这是一个链接</a>
<img src="photo.jpg" alt="图片加载失败时的替代文字">
<ul>
<li>无序列表第一项</li>
<li>无序列表第二项</li>
</ul>
<ol>
<li>有序列表第一项</li>
<li>有序列表第二项</li>
</ol>
几个容易踩的点:
- 标签大多成对出现,
<p>内容</p>,忘记闭合会让后续内容被错误嵌套。 <img>是自闭合标签,不需要</img>;alt属性在图片加载失败或读屏时起作用,建议始终填写。- 标题标签
h1到h6表示层级,不要为了字号大小而跳级使用,字号交给 CSS 控制。 - 属性写在开始标签内,格式是
属性名="值"。
用浏览器直接运行
不需要安装任何软件,浏览器本身就是 HTML 的运行环境:
- 用任意文本编辑器(记事本、VS Code 等)新建文件,写入上面的示例代码。
- 保存时把文件名设为
index.html,注意扩展名是.html而不是.txt。 - 在文件管理器里双击该文件,或把它拖进浏览器窗口。
- 修改代码后保存,回到浏览器按 F5 刷新即可看到更新。
验证方法:右键页面选择“查看网页源代码”,确认浏览器读到的就是你写的标签;如果看到的是原始代码而不是渲染结果,说明文件扩展名可能不对。
用 JSFiddle 在线编写和分享
如果不想在本地建文件,或者想把代码片段发给别人看,可以用在线编辑器。JSFiddle 是一个在浏览器中运行的代码编辑器,支持 HTML、CSS、JavaScript,也支持 React 和 Tailwind 等,适合测试片段和分享示例。
基本流程:
- 打开 jsfiddle.net,页面通常分为 HTML、CSS、JavaScript 和 Result(结果)几个面板。
- 在 HTML 面板里写标签内容。注意这里只需要写
<body>内部的部分,doctype、html、head等骨架由平台自动补全。 - 点击 Run 或等待自动刷新,Result 面板会即时显示渲染效果。
- 点击 Save 保存,会得到一个可分享的链接,别人打开就能看到你的代码和运行结果。
例如在 HTML 面板输入:
<h1>在线测试 HTML</h1>
<p>这段文字会立刻出现在结果区。</p>
预期结果是 Result 面板马上渲染出标题和段落。如果没变化,先确认是否点了 Run,以及代码是否写在了正确的面板里。
需要留意的是,JSFiddle 提供升级到 PRO 的入口(见 jsfiddle.net/pro),但基础编辑和运行功能无需付费即可使用;具体功能差异以网站页面说明为准。
什么时候用本地文件,什么时候用在线编辑器
| 场景 | 更合适的方式 |
|---|---|
| 学习标签、做完整小项目 | 本地 .html 文件,便于管理多个文件和资源 |
| 快速验证一个片段 | 在线编辑器,打开即写,无需建文件 |
| 把代码发给别人复现问题 | 在线编辑器,保存后直接分享链接 |
| 需要引用本地图片、多个 CSS/JS 文件 | 本地文件,路径管理更直观 |
两者并不冲突:日常练习可以用本地文件打基础,遇到“想快速试一下这段标签对不对”或“需要贴给别人看”时,在线编辑器更省事。
常见卡点
- 中文乱码:检查
<meta charset="UTF-8">是否存在,以及文件保存编码是否为 UTF-8。 - 标签没生效:确认标签名拼写正确、成对闭合,属性值用引号包裹。
- 改了代码页面没变:本地文件记得保存后刷新;在线编辑器确认已触发运行。
- 图片不显示:检查
src路径是否正确,本地图片和 HTML 文件的相对位置是否匹配。 - 把 HTML 当编程语言:需要计算、判断、循环时,那是 JavaScript 的职责,HTML 只描述结构。
把结构、样式、行为分开理解,是继续学习 CSS 和 JavaScript 的前提。先能独立写出并运行一个结构正确的 HTML 页面,再往上叠加样式和交互,路径会清晰很多。
新闻网站里的“social”指什么?如何找到社会新闻板块
在新闻网站的分类体系里,“social”通常指“社会新闻”,即警方、司法、事故、民生、社会事件这一类内容,而不是“社交媒体”。判断依据很简单:看它出现在哪一层。如果“social”出现在主导航栏、与“nacional”“mundo”“desporto”并列,它就是一个内容频道;如果它出现在文章底部、与分享图标放在一起,那才是社交分享功能。以葡语新闻网站 Record(record.pt)为例,其站点关键词同时包含“social”“nacional”“internacional”“desporto”,说明“social”是与其他新闻门类并列的内容标签,而非分享按钮。
“social”与“nacional”“mundo”的区别
这三个标签不是互斥关系,而是按不同维度切分同一批新闻:
| 标签 | 划分维度 | 典型内容 |
|---|---|---|
| social | 题材(社会领域) | 案件、司法判决、事故、民生议题、社会现象 |
| nacional | 地理(本国) | 葡萄牙国内发生的各类新闻,含政治、经济、社会 |
| mundo / internacional | 地理(国外) | 葡萄牙以外国家和地区的新闻 |
因此一条葡萄牙国内的刑事案件,既可能出现在“social”,也可能出现在“nacional”;一条发生在国外的社会事件,则可能同时属于“social”和“mundo”。“social”回答的是“这是什么类型的事”,“nacional/mundo”回答的是“这事发生在哪里”。
在新闻网站上定位社会新闻板块的常见方法
- 看主导航栏:在首页顶部或侧边菜单中找与“nacional”“mundo”“desporto”并列的“social”入口,点击即进入该频道列表页。
- 看文章的分类标签:打开一篇具体报道,标题下方或文末通常标注所属分类,点击“social”标签可聚合出同类文章。
- 用站内搜索:在搜索框输入“social”或具体事件关键词(如“crime”“tribunal”“acidente”),再按时间或分类筛选。
- 看 URL 结构:不少网站把分类写进网址路径,出现
/social/这类片段时,说明该页属于社会新闻频道。
预期结果:进入的是一个按时间倒序排列的文章列表,而不是单篇报道;列表页通常还带有子分类或地区筛选。
需要注意的歧义
- 社交分享:页面上的“social”若紧挨 Facebook、X 等图标,指的是分享功能,不是新闻分类。
- 社会议题:部分网站用“social”指社会政策、福利、教育、住房等公共议题,范围比“警情司法”更宽。
- 语言差异:葡语站点的“social”与英语站点的“society”“news”不完全对应,需结合该站实际栏目判断。
以 Record.pt 为例
Record 是葡萄牙的体育为主、兼顾综合新闻的网站,其关键词覆盖“Notícias”“informação”“social”“portugal”“nacional”“internacional”“desporto”。要在该类站点浏览社会新闻,可先进入综合新闻或“nacional”板块,再通过分类标签或搜索收敛到“social”题材;由于站点以体育报道为主,社会新闻的入口可能不如“desporto”显眼,直接使用站内搜索往往更快。该站设有 Premium 付费入口(record.pt/premium),但资料未说明社会新闻是否属于付费范围,浏览前可先确认具体文章是否标注 Premium。
Pedagoguery Software 为 Windows 提供哪些数学软件,如何下载试用和购买?
Pedagoguery Software 目前面向 Windows 和 Macintosh 提供数学与几何类软件,官网列出的当前产品包括 GrafEq、Poly、Poly Pro、Tess、A Smaller GIF、COGS 和 Gif·gIf·giF。Windows 用户可以下载评估版试用,价格与购买方式集中在官网的 Prices & Purchasing 页面,具体授权条款在 Policies and Licenses 页面。以下内容均来自该官网首页信息,未在页面出现的细节(如具体价格数字、系统版本要求)需以官网对应页面为准。
当前产品一览
官网首页将产品分为两类:数学/几何类软件和图形工具类软件。
| 产品 | 类别 | 说明 |
|---|---|---|
| GrafEq | 数学/几何 | 官网列出的当前产品之一 |
| Poly | 数学/几何 | 官网列出的当前产品之一 |
| Poly Pro | 数学/几何 | Poly 的专业版本 |
| Tess | 数学/几何 | 官网列出的当前产品之一 |
| A Smaller GIF | 图形工具 | 官网列出的当前产品之一 |
| COGS | 图形工具 | 官网列出的当前产品之一 |
| Gif·gIf·giF | 图形工具 | 官网列出的当前产品之一 |
如果目标是数学或几何教学与作图,重点关注 GrafEq、Poly、Poly Pro、Tess;如果目标是 GIF 或图形处理,则看后三项。
如何下载评估版
官网首页明确提供“download evaluation copies of our software”(下载软件评估版)的入口。操作路径如下:
- 打开 peda.com 首页。
- 在导航栏或正文链接中找到 Downloads 入口。
- 在下载页面选择对应产品,并选择 Windows 版本。
- 下载后在本机安装,作为评估版试用。
预期结果:获得可运行的评估版程序,用于在购买前体验功能。官网未在首页说明评估版的具体限制(如天数、功能裁剪),这些需在下载页或产品页确认。
试用版与正式版、许可方式
官网首页提到两点关键信息:
- 提供的是“evaluation copies”(评估版),即先试用再决定是否购买。
- 许可与政策集中在 Policies and Licenses 页面(首页链接为 “click here”)。
因此,试用版与正式版的差异、许可类型(单机/多机、个人/机构)应以 Policies and Licenses 页面为准。首页没有给出这些细节,不要凭常识推断。
查看价格与购买
官网首页有独立的 Prices & Purchasing 入口,同时提到 “book recommendations”(书籍推荐)。
- 打开 peda.com 首页。
- 点击 Prices & Purchasing。
- 在该页面查看各产品的价格与购买方式。
- 如需了解授权范围,再回到 Policies and Licenses 页面核对。
注意:首页未列出任何具体价格数字,也未说明支付平台,因此价格和支付方式必须到 Prices & Purchasing 页面确认。
联系开发者获取支持
官网首页提供了完整的联系方式:
- 邮箱:[email protected]
- 语音留言:604 629 7589
- 传真:778 373 4963
- 邮寄地址:Pedagoguery Software Inc.,4446 Lazelle Ave.,Terrace, B.C. V8G 1R8,Canada
购买前的问题、许可咨询或安装问题,可通过以上方式联系。
常见卡点
- 首页导航菜单需要启用 JavaScript 才能使用;如果菜单不显示,可直接使用正文中的文字链接。
- 首页只列出产品名称,未说明每个产品的具体功能和适用场景,需进入各产品页面查看。
- 价格、评估版限制、许可条款都不在首页,分别位于 Prices & Purchasing 和 Policies and Licenses 页面。
什么是JavaScript闭包?
JavaScript闭包是指函数能够“记住”并访问其定义时所处作用域的能力,即使该函数在其定义作用域之外被执行。简单说,闭包由“函数”加上“该函数创建时所在的作用域”共同构成,让内部函数可以读取外部函数的局部变量,而这些变量在外部函数返回后依然存在。
理解闭包需要先区分作用域与生命周期。普通局部变量在函数执行结束后会被回收,但闭包打破了这一默认行为。例如:
function outer(x) {
return function inner(y) {
return x + y;
};
}
const addFive = outer(5);
console.log(addFive(3)); // 输出 8
这里inner函数引用了outer的参数x。outer执行完毕后,按常规x应被销毁,但由于inner仍持有对x的引用,JavaScript引擎会保留x所在的作用域,使addFive在后续调用时仍能访问x=5。inner与这个被保留的作用域合起来就是闭包。
闭包最常见的用途是创建“私有变量”,即无法从外部直接访问、只能通过特定函数操作的数据。例如计数器:
function createCounter() {
let count = 0;
return {
increment: function() { count++; },
get: function() { return count; }
};
}
const counter = createCounter();
counter.increment();
counter.increment();
console.log(counter.get()); // 输出 2
这里的count对外不可见,只能通过increment和get修改或读取,实现了类似其他语言中私有字段的效果。这在模块化代码、事件处理器和回调函数中非常普遍。
闭包也容易引发问题,最常见的是循环中误用var声明变量。例如给多个按钮绑定点击事件时,若在for循环中用var定义循环变量i,所有回调共享同一个i,最终都显示循环结束后的值。解决办法是用let声明(每次迭代创建独立绑定),或通过立即执行函数传入当前值。
闭包与普通函数、箭头函数的关键区别在于:箭头函数没有自己的this,它继承定义时外层作用域的this,因此不适合用作需要动态this的方法;而普通函数作为闭包时,this取决于调用方式。此外,闭包会持续占用内存,因为被引用的作用域无法释放,大量不必要的闭包可能导致内存占用上升,在长生命周期对象中应避免持有大对象。
判断一个函数是否形成闭包,看它是否引用了自身定义作用域之外的变量。若函数只使用自己的参数和局部变量,则不构成闭包。闭包是JavaScript函数式编程的基础,也是理解事件循环、模块模式和柯里化的前提。
网站信息概览
从当前可见信息判断,多年域名记录配合专业 DNS 或边缘网络,可能反映出持续的基础设施管理,服务中断和临时变更的概率相对更低。
域名与注册信息
该域名注册于 2019 年,已有约 7 年历史。域名使用常见的 .net 通用顶级域。
DNS 与邮件配置
从当前可见信息判断,NS 记录显示该域名接入了 s36.network。从当前可见信息判断,MX 记录使用 rzone.de 企业邮箱服务。DNS 中没有 CNAME 记录,这是常见的直接解析方式。可见邮件策略包含 SPF 和 DMARC,DKIM 是否启用尚待进一步确认。现有迹象表明,第三方验证记录涉及 Google。
TLS 与证书
TLS 使用现代椭圆曲线公钥 EC。证书链完整,可由客户端连续验证。证书只提供域名身份信息,未见组织字段。依据当前可见线索,证书由 Let's Encrypt 签发,采用常见的自动化短周期证书服务。TLS 证书采用约 89 天的短有效期。
HTTP 响应
6 项常用安全响应配置均未出现。未发现 X-Powered-By,后端框架信息未通过该字段公开。响应头没有可识别的内部信息泄露。服务端仅返回软件名称 nginx。响应头中未发现明确的 CDN/WAF 标识。
技术栈分析
依据当前可见线索,已识别的搭建技术包括 nginx,但版本保持隐藏。这样的配置能降低被快速匹配已知版本问题的便利性,但不能替代及时更新。
SEO 与社交分享
首页未检测到 Canonical 规范链接。Title 信息完整,共 10 个字符。Meta Description 信息完整且长度适中。页面允许搜索引擎收录和跟踪链接。页面未公开 Generator 元标签。
主机和电子邮件
页面、搜索与分享信息
| 页面描述 | MIKESOFT presents you WINDOWS 96, the latest release of your favorite operating system! |
|---|---|
| 规范链接 | 未检测到 |
| 语言 | 未知(默认) |
| Twitter Card | 未检测到 |
社交分享预览
6 个字段robots.txt (在新窗口打开)
0 条规则所有爬虫 0 条允许 · 0 条禁止
没有符合条件的规则。
Sitemaps
0暂未发现 Sitemaps
域名登记事实 RDAP / WHOIS
| 注册商 | Cronon GmbH |
|---|---|
| 注册时间 | 2019-04-18 |
| 到期时间 | 2027-04-18 |
| 域名状态 | active |
| 名称服务器 | ns1.s36.network、ns2.s36.network |
| DNSSEC | unsigned |
DNS 记录
| 类型 | 名称 | 值 | TTL | 优先级 |
|---|---|---|---|---|
| A | windows96.net | 23.148.232.137 | 86400 | — |
| AAAA | windows96.net | 2602:fa9b:227:6:4265:7265:6e69:6b65 | 86400 | — |
| MX | windows96.net | smtp.rzone.de | 86400 | 5 |
| NS | windows96.net | ns1.s36.network | 86400 | — |
| NS | windows96.net | ns2.s36.network | 86400 | — |
| TXT | windows96.net | google-site-verification=ORA7JfJPRG80g1DWaKw_s8U5ozovN5UJ90TJLkfka2o | 86400 | — |
| TXT | windows96.net | v=spf1 include:smtp.rzone.de ~all | 86400 | — |
| DMARC | _dmarc.windows96.net | v=DMARC1; p=quarantine; rua=mailto:[email protected] | 86400 | — |
TLS 与证书
| 定性结果 | 配置正常 |
|---|---|
| 支持协议 | TLSv1.2、TLSv1.3 |
| 协商协议 | TLSv1.3 |
| 证书主题 | *.windows96.net |
| 颁发者 | Let's Encrypt |
| 有效期至 | 2026-12-11T23:37 · 记录时剩余 76 天 |
| 验证事实 | 证书信任:通过 · 域名匹配:通过 |
HTTP 响应标头
| 标头 | 值 |
|---|---|
| content-type | text/html |
| server | nginx |
用户评价(0)