JS进阶笔记1

简介: JS进阶笔记1

一、JavaScript代码调试


  • 代码调试:检查代码的执行路径和变量的值与你设计程序时期望的是否一致。


  • 在Chrome、Edge浏览器中调试


  • alert()


  • console.log():常用,Ctrl+Shift+I -> Console


  • 开发者工具:设断点, Ctrl+Shift+I -> Sources


image.png


debugger 关键词


  • debugger 关键词会停止 JavaScript 的执行,并调用(如果有)调试函数。


image.png


二、JavaScript语言


2.1 语法特点


  • 弱类型语言:变量声明时不指定类型,一个变量可以赋不同数据类型的值


  • 区分大小写:Student与student是两个不同的标识符


  • 变量命名规范:一般全部小写,多个单词,从第二个单词开始首字母大写


  • 关于语句结束后的分号:可选,但建议加上


2.2 变量的声明


  • 使用var或let关键字


  • var关键字:传统方式,只有全局作用域和函数作用域


  • let关键字:现代JavaScript中的方式


  • 两者的区别:


  • let声明的变量只在代码块内有效,实现块级作用域,而var声明的变量没有块级作用域,只有函数作用域和全局作用域


  • var声明的变量存在变量提升,而let声明的变量不存在变量提升


  • 作用域


  • 变量的作用域(Scope),指变量在脚本代码中可读、写的有效范围


  • ECMAScript 6之后,变量的作用域有全局作用域、函数作用域和块级作用域,ECMAScript 6之前,无块级作用域


  • var声明的变量只有全局作用域和函数作用域,let声明的变量有全局作用域、函数作用域和块级作用域


  • 因var存在变量提升,所以var变量的全局作用域指整个页面的JavaScript代码,函数作用域指整个函数;而let和const不存在变量提升,故全局作用域指声明语句开始到整个页面脚本代码,函数和块级作用域指从声明语句到函数/块结束


  • 块级作用域例子
{
  let a = 10;
  var b = 1;
}
a // ReferenceError: a is not defined.
b // 1
---
if (true) {
  let test = true; // 使用 "let"
}
alert(test);       // Error: test is not defined
---
if (true) {
  var test = true; // 使用 "var" 而不是 "let"
}
alert(test);       // true,变量在 if 结束后仍存在
  • 函数作用域例子
function f1() {
    var a = 1;
    let b = 2;
}
console.log(a);
console.log(b);
// 报错,a和b均未定义
  • 变量提升:即变量可以在声明之前使用,值为undefined。
// 未声明变量,直接使用
console.log(foo); // 报错ReferenceError
---
// 使用var,先使用变量,后声明并赋值
console.log(foo); // 输出undefined
var foo = 2;
---
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
  • var声明提高到所属作用域的顶端:如var声明变量在任何函数之外,则变量的作用域会提升到整个代码的最高处(全局变量);在函数体内使用var声明变量,其作用域会被提升至所在函数。


  • 注意:


  • 1.仅声明被提升,赋初值仍在原位置
  • 2.变量提升不会跨script块


  • let声明的变量不存在变量提升


  • 使用const声明常量


  • 常量在脚本代码整个运行过程中保持不变
  • 使用const声明常量时,必需赋初值
  • const 常量名 = 值
  • 常量不能重复声明
const pi = 3.1415926;


相关文章
|
1月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
43 0
|
18天前
|
自然语言处理 JavaScript 前端开发
[JS]同事看了我做的this笔记,直摇头,坦言:我还是参考启发博文吧
本文介绍了JavaScript中`this`关键字的重要性和使用规则。作者回顾了早期笔记,总结了`this`指向的各种情况,并分享了最新的理解。文章强调了`this`在不同上下文中的指向,包括对象方法、全局函数、箭头函数等,并提供了改变`this`指向的方法。适合JavaScript开发者参考。
35 2
|
2月前
|
JavaScript 前端开发 Java
JavaScript笔记(回顾一,基础知识篇)
JavaScript基础知识点回顾,包括语言定义、ECMAScript规范、字面量、变量声明、操作符、关键字、注释、流程控制语句、数据类型、类型转换和引用数据类型等。
JavaScript笔记(回顾一,基础知识篇)
|
3月前
|
存储 缓存 自然语言处理
深入理解JS | 青训营笔记
深入理解JS | 青训营笔记
40 0
|
4月前
|
前端开发 JavaScript 安全
JavaScript进阶-JavaScript库与框架简介
【7月更文挑战第11天】JavaScript库和框架加速Web开发,但也带来挑战。选择适合项目、团队技能的库或框架,如React、Angular、Vue,是关键。保持依赖更新,注意性能优化,避免过度依赖。遵循最佳实践,确保安全性,如防XSS和CSRF。学习基础,结合代码示例(如React计数器组件),提升开发效率和应用质量。
58 1
|
4月前
|
缓存 JavaScript 前端开发
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第4天】JavaScript的Web Workers和Service Worker增强了Web性能。Web Workers处理后台多线程,减轻主线程负担,但通信有开销,受同源策略限制。Service Worker则用于离线缓存和推送通知,需管理其生命周期、更新策略,并确保安全。两者都带来了挑战,但也极大提升了用户体验。通过理解和优化,开发者能构建更高效、安全的Web应用。
128 2
|
4月前
|
资源调度 JavaScript 前端开发
JavaScript进阶 - JavaScript库与框架简介
【7月更文挑战第5天】JavaScript库和框架构成了前端开发的核心,如jQuery简化DOM操作,Angular、React和Vue提供全面解决方案。选择时要明确需求,避免过度工程化和陡峭学习曲线。使用版本管理工具确保兼容性,持续学习以适应技术变化。示例展示了jQuery和React的简单应用。正确选择和使用这些工具,能提升开发效率并创造优秀Web应用。
49 2
|
4月前
|
缓存 前端开发 JavaScript
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第10天】在Web开发中,Web Workers和Service Worker提升性能。Workers运行后台任务,防止界面冻结。Web Workers处理计算密集型任务,Service Worker则缓存资源实现离线支持。常见问题包括通信故障、资源限制、注册错误及缓存更新。通过示例代码展示了两者用法,并强调生命周期管理和错误处理的重要性。善用这些技术,可构建高性能的Web应用。
91 0
|
4月前
|
XML 前端开发 JavaScript
JavaScript进阶 - AJAX请求与Fetch API
【7月更文挑战第9天】JavaScript进阶:AJAX与Fetch API对比。AJAX用于异步数据交换,XMLHttpRequest API复杂,依赖回调。Fetch API是现代、基于Promise的解决方案,简化请求处理。示例:`fetch('url').then(r => r.json()).then(data => console.log(data)).catch(err => console.error(err))`。注意点包括检查HTTP状态、错误处理、CORS、Cookie和超时。Fetch提高了异步代码的可读性,但需留意潜在问题。
103 0
|
4月前
|
存储 JavaScript 前端开发
JavaScript进阶 - 浏览器存储:localStorage, sessionStorage, cookies
【7月更文挑战第8天】Web开发中的客户端存储技术,如`localStorage`, `sessionStorage`和`cookies`,用于保存用户设置和跟踪活动。`localStorage`持久化存储,`sessionStorage`随页面会话消失。两者提供基本的增删查改操作,但有大小限制和安全风险。`cookies`适合会话管理,可设置过期时间并能跨域。使用时注意存储量、安全性和跨域策略,选择适合场景的存储方式。
200 0