js引用 代码

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>js写到哪里?</title>
  8. <style>
  9. .active {
  10. color: red;
  11. background-color: yellow;
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <!-- 前端通用的脚本语言 -->
  17. <h2>www.php.cn</h2>
  18. <!-- 1.内联脚本 -->
  19. <button onclick="document.querySelector('h2').classList.toggle('active');">Button1</button>
  20. <!-- 2.内部脚本 -->
  21. <button onclick="activeTitle(this)">Button2</button>
  22. <!-- <script>
  23. function activeTitle(){
  24. document.querySelector('h2').classList.toggle('active');
  25. }
  26. </script> -->
  27. <!-- 3.外部脚本 -->
  28. <script src="outer.js"></script>
  29. <!-- 1.内联脚本:事件属性
  30. 2.内部脚本:script标签中
  31. 3.外部脚本:script:src 属性中 -->
  32. </body>
  33. </html>

效果图

变量与常量 代码

  1. // 1.变量
  2. // 声明
  3. let userName;
  4. console.log(userName);
  5. // 声明时并初始化(第一次赋值)
  6. let itemName = "手机";
  7. console.log(itemName);
  8. // 更新
  9. userName = "天蓬老师";
  10. console.log(userName);
  11. //2.常量
  12. // 声明时必须初始化
  13. const unitPrice = 3699;
  14. // unitPrice = 2222;
  15. const APP_NAME = "在线商城";
  16. // 3.标识符
  17. // 字母,数字,下划线,$,但是不能数字开头
  18. // 严格区分大小写,userName,username不是同一个
  19. // 不得使用关键字与可保留字
  20. // 4.命名方案
  21. // 驼峰式:userName
  22. // 帕斯卡:UserName,也叫大驼峰
  23. // 匈牙利:oBtn,_sex,_salary
  24. // js中推荐全部使用驼峰式

效果图

变量类型与类型转换 代码

  1. // 1.原始类型:字符串,数值,布尔,undefined,null
  2. let email = "admin@php.cn";
  3. console.log(email,typeof email);
  4. let price = 8899;
  5. console.log(price, typeof price);
  6. let isEmpty = false;
  7. console.log(isEmpty,typeof isEmpty);
  8. let num;
  9. console.log(num);
  10. let o = null;
  11. console.log(o,typeof null);
  12. if(o==null) console.log("null");
  13. // 2.引用类型:数组,对象,函数
  14. //数组
  15. let arr = [100,"手机",6699];
  16. console.log(arr);
  17. // console.log(arr instanceof Array);
  18. // console.log(arr instanceof Object);
  19. console.log(Array.isArray(arr));//判定是否为数组
  20. //对象
  21. let items = {
  22. id:100,
  23. name:"手机",
  24. price:6699
  25. };
  26. console.log(items);
  27. console.table(items);
  28. console.log(items instanceof Object);
  29. function show(){}
  30. console.log(show instanceof Function);
  31. console.log(typeof show);
  32. // 通常只有相同类型的数据在一起运算,它的结果才有意义
  33. console.log(100+100);
  34. // "+":字符串运算中表示连接,此时会自动的触发类型转换
  35. console.log(100+"100");
  36. // "==":非严格匹配,只检查值,而不检查类型
  37. console.log(100 == "100");
  38. // "===":严格匹配,必须值与类型全部相同才返回true
  39. console.log(100==="100");
  40. // 平时应该用"==="

效果图

函数提升与重写 代码

  1. // 声明,会自动提升到顶部
  2. console.log(getName("天蓬老师"));
  3. // 声明
  4. function getName(name){
  5. return "Welcome to " + name;
  6. // console.log(1);
  7. }
  8. // 调用
  9. console.log(getName("天蓬老师"));
  10. function getName(name){
  11. return "欢迎 " + name;
  12. }
  13. // // 1.函数声明提升
  14. // console.log(sum(1,2));
  15. // // 使用匿名函数/函数表达式
  16. // let sum = function (a,b){
  17. // return a + b;
  18. // }
  19. // 2.函数可以被重写
  20. const sum = function(a,b){
  21. return a + b;
  22. }
  23. // sum = function(a,b){
  24. // return a + b+10;
  25. // }
  26. console.log(sum(1,2));
  27. // 将函数做为值,赋给一个常量

效果图

函数参数与返回值 代码

  1. let sum = function(a,b){
  2. return a + b;
  3. }
  4. console.log(sum(1,2));
  5. console.log(sum(1));
  6. // 默认参数
  7. sum = function (a,b = 2){
  8. return a + b;
  9. }
  10. console.log(sum(1));
  11. sum = function (a,b,c,d){
  12. return a + b + c + d;
  13. }
  14. console.log(sum(1,2,3,4));
  15. // ...归内参数,简化函数的参数声明
  16. sum = function (...arr) {
  17. console.log(arr);
  18. return arr.reduce(function(p,c){
  19. return p + c;
  20. });
  21. }
  22. console.log(sum(1,2,3,4,5));
  23. let params = [10,20,30,40,50];
  24. console.log(params);
  25. // ...扩展参数,简化函数的调用参数
  26. console.log(sum(...params));
  27. console.log("-------------")
  28. sum = function(){
  29. console.log(arguments);
  30. console.log(...arguments);
  31. // 类数组:类似数组其实是对象
  32. // 属性为从0递增的正整数,且有legth属性
  33. // return a + b + c + d;
  34. // console.log(Array.from(arguments));
  35. // return Array.from(arguments).reduce(function(p,c){
  36. // return p + c;
  37. // })
  38. console.log(Array.of(...arguments));
  39. return Array.of(...arguments).reduce(function(p,c){
  40. return p + c;
  41. });
  42. }
  43. console.log(sum(...params));
  44. // ------------------------
  45. // 函数都是单值返回,如果想返回多个值,将结果封装到数组或对象中
  46. let getItems = function() {
  47. return [100,"手机",666];
  48. }
  49. console.log(getItems());
  50. getItems = function() {
  51. return {id:100, name:"手机", price:666};
  52. }
  53. console.log(getItems());

效果图

高阶函数 代码

  1. // 高阶函数:使用函数为参数或者将函数做为返回值的函数
  2. // 1.回调函数
  3. document.addEventListener('click',function(){
  4. alert("Hello World~~");
  5. })
  6. // 2.偏函数: 简化了声明时的参数声明
  7. let sum = function(a,b) {
  8. return function(c,d) {
  9. return a + b + c + d;
  10. }
  11. }
  12. let f1 = sum(1,2);
  13. console.log(f1(3,4));
  14. // 3.柯里化
  15. sum = function(a) {
  16. return function(b) {
  17. return function(c) {
  18. return function(d) {
  19. return a + b + c + d;
  20. };
  21. };
  22. };
  23. }
  24. // 简化了调用参数
  25. let res = sum(10)(20)(30)(40);
  26. console.log(res);
  27. // 4.纯函数
  28. // 完全独于调用上下文,返回值只能受到传入的参数影响
  29. function getDate(){
  30. return Date.now();
  31. }
  32. console.log(getDate());
  33. //下面是纯函数
  34. function add(a,b){
  35. console.log(a + b);
  36. }
  37. add(1,2);

效果图

箭头函数 代码

  1. let sum = function(a, b) {
  2. return a + b;
  3. }
  4. console.log(sum(1, 2));
  5. // 箭头函数用来简化 "匿名函数" 的声明
  6. sum = (a, b)=>{
  7. return a + b;
  8. }
  9. console.log(sum(1, 2));
  10. // 如果函数体只有一条语句,可不写return
  11. sum = (a, b)=> a + b;
  12. console.log(sum(10, 20));
  13. // 如果只有一个参数,连小括号都可以不用了
  14. let tips = str => console.log(str);
  15. tips("欢迎新同学");
  16. // 如果没有参数,小括号不能省略
  17. tips = ()=> console.log("Success");
  18. tips();
  19. // 1.箭头函数没有原型属性prototype,不能当构造函数用
  20. // 2.箭头函数中的this,始终与它的上下文绑定

效果图

作用域与闭包 代码

  1. // js 三种作用域:全局,函数, 块
  2. // 1.全局作用域
  3. let site = "php中文网";
  4. console.log(site);
  5. // 2.函数作用域
  6. function getSite(){
  7. // 私有变量
  8. let domain = "www.php.cn";
  9. return site + domain;
  10. }
  11. // console.log(domain);
  12. console.log(getSite());
  13. // 3.块作用域
  14. {
  15. let a = 1;
  16. const B = "Hello";
  17. var c = 2;//var 不支持块作用域功能
  18. }
  19. // console.log(a,B);
  20. // console.log(c);
  21. // 4.闭包
  22. // 自由变量: 即不是函数参数变量也不是私有变量,存在于函数调用上下文中(函数外)
  23. // 闭包:能够访问自由变量的函数,所以理论上讲,任何函数都是闭够包
  24. let num = 100;
  25. function add(a, b){
  26. // a,b: 参数变量
  27. // t: 私有变量
  28. // num: 自由变量
  29. let t = 0;
  30. return t + a + b + num;
  31. }
  32. function a() {
  33. let n = 100;
  34. // 这个返回的子函数就是闭包
  35. return function() {
  36. return n;
  37. };
  38. }
  39. // console.log(n);
  40. console.log(a()());
  41. function f1() {
  42. let a = 1;
  43. // a 相对于f1是私有变量,但是相对于返回的匿名函数就是一个自由变量
  44. return function () {
  45. return a++;
  46. };
  47. }
  48. let f2 = f1();
  49. console.log(f2());
  50. console.log(f2());
  51. // 闭包会保存私有变量,一般不用

效果图

立即执行函数 代码

  1. // 立即执行函数:IIFE
  2. function sum(a, b){
  3. console.log(a + b);
  4. }
  5. sum(10,20);
  6. // 立即执行:声明完直接调用
  7. (function (a, b){
  8. console.log(a + b);
  9. })(10,20)
  10. // 在远古时代,js不支持块作用域(现在用let来支持块作用域)
  11. // IIFE模拟块作用域
  12. // if(true) {
  13. // var b = 888;
  14. // }
  15. // (function (){
  16. // if(true) {
  17. // var b = 888;
  18. // }
  19. // })
  20. // console.log(b);
  21. let module = (function(name,email){
  22. return {
  23. getEmail: () => "Email:" + email,
  24. getName: () => "Name:" + name,
  25. };
  26. })("amdin","admin@php.cn");
  27. console.log(module);
  28. console.log(module.getName());
  29. console.log(module.getEmail());

效果图

总结

js引用:

  • 内联脚本:事件属性
  • 内部脚本:script标签中
  • 外部脚本:script:src 属性中

变量与常量:

  • 变量: let userName;
  • 常量: const APP_NAME = “在线商城”;
  • 标识符: 1.字母,数字,下划线,$,但是不能数字开头 2.严格区分大小写,userName,username不是同一个 3.不得使用关键字与可保留字
  • 命名方案:1.驼峰式:userName 2.帕斯卡:UserName,也叫大驼峰 3.匈牙利:oBtn,_sex,_salary 4.js中推荐全部使用驼峰式

变量类型与类型转换:

  • 原始类型:字符串,数值,布尔,undefined,null
  • 引用类型:数组,对象,函数 (1.通常只有相同类型的数据在一起运算,它的结果才有意义 2.”==”:非严格匹配,只检查值,而不检查类型;”===”:严格匹配,必须值与类型全部相同才返回true;平时应该用”===”)

函数提升与重写:

  • 函数声明提升,会自动提升到顶部
  • 函数可以被重写
  • 将函数做为值,赋给一个常量来解决函数声明提升和函数可以被重写问题

函数参数与返回值:

  • 默认参数:function (a,b = 2){ return a + b;}
  • …归内参数,简化函数的参数声明:function (…arr) {}
  • …扩展参数,简化函数的调用参数:console.log(sum(…params));
  • 函数都是单值返回,如果想返回多个值,将结果封装到数组或对象中

高阶函数:使用函数为参数或者将函数做为返回值的函数

  • 回调函数:document.addEventListener(‘click’,function(){ alert(“Hello World~~”);})
  • 偏函数: 简化了声明时的参数声明
  • 柯里化:简化了调用参数
  • 纯函数:完全独于调用上下文,返回值只能受到传入的参数影响

箭头函数:

  • 箭头函数用来简化 “匿名函数” 的声明
  • 如果函数体只有一条语句,可不写return
  • 如果只有一个参数,连小括号都可以不用了
  • 如果没有参数,小括号不能省略
  • 箭头函数没有原型属性prototype,不能当构造函数用
  • 箭头函数中的this,始终与它的上下文绑定

三种作用域:

  • 全局,函数, 块

自由变量:

  • 即不是函数参数变量也不是私有变量,存在于函数调用上下文中(函数外)

闭包:

  • 能够访问自由变量的函数,所以理论上讲,任何函数都是闭够包

立即执行函数:

  • 声明完直接调用 (function (a, b){console.log(a + b);})(10,20)
  • 在远古时代,js的var不支持块作用域(现在用let来支持块作用域)
  • IIFE模拟块作用域

更多相关文章

  1. shell脚本专题(05):传参
  2. flex容器中的四个属性的功能,参数,以及作用
  3. “优化都不懂,你还想做机器学习?”
  4. 面试题:人工神经网络中为什么ReLu要好过于tanh和sigmoid?
  5. 函数节流你应该知道的那点事,建议收藏!
  6. 函数节流你应该知道的那点事
  7. python之函数的基本使用
  8. flex容器属性的功能,参数,以及作用
  9. 3.24实例演示flex容器中的四个属性的功能,参数,以及作用

随机推荐

  1. PHP实现数据分页显示详细操作
  2. php和java的优势
  3. 什么是php扩展
  4. 在php中get和post区别
  5. php header的作用
  6. 什么是php工厂模式
  7. php join的用法
  8. php中define的用法
  9. asp与php网站优缺点
  10. php保留两位小数的方法