格式:let作用域:代码成员的可见范围作用域类型:块作用域,函数作用域, 全局作用域
格式:const命名规则写法特点:必须是: 字母,数字, 下划线"_", "$"(四种),其它字符均是非法符号;首字母不得使用"数字"注意:声明时,必须初始化
function getName(username) {return 'Hello ' + username;}console.log(getName('aaaa'));
// 第一种声明方式,将匿名函数当成值赋给一个变量let getUserName = function(username) {return 'Hello ' + username;};console.log(getUserName('aaaa'));// 第二种方式将声明与调用二合一: 立即调用函数,IIFE// 表达式,是用一对括号包住的console.log((function(username) {return 'Hello ' + username;})('aaaa'));
用来简化匿名函数的声明
// 1).标准命名函数,需修改成箭头函数function sum(a, b) {console.log(a + b);}// 2).将命名函数改成了匿名函数let add = function(a, b) {console.log(a + b);};// 3).使用箭头函数来简化匿名函数// => 胖箭头, ->// 转化方法// <1>. 去掉 function// <2>. 在参数列表与大括号之间使用 '=>'add = (a, b) => {console.log(a + b);};// 如果只有一个参数,可以不写参数列表的括号add = a => {console.log(a + 88);};// 如果没有参数,括号必须加上add = () => {console.log(34 + 88);};// 如果函数体只有一条语句, 大括号都可以不用add = () => console.log(34 + 88);add();
注意:1. 如果函数需要多次调用, 用命名, 函数表达式, 都可以2. 如果代码要求,必须遵循"先声明, 再调用"的规则, 那就必须用"函数表达式"3. 如果只有完成一些特定的,一次性的工作, 不想留下任何痕迹, 用"IIFE", 模块4. 如果调用函数时,需要一个函数充当参数,例如:回调, 就可以使用箭头函数来简化 匿名函数的 声明
原始类型: number, string, boolean,undefined, null
// console.log(100 + 200);console.log(typeof 100, typeof 200);console.log('hello ' + 'world');console.log(typeof('hello ' + 100));// 为什么要发生类型转换?// 因为不同的类型的数据,不能直接运算// 先转换,再运算console.log(true, false);console.log(typeof true);console.log(typeof(true + 1));// true => 1 隐式转换console.log(typeof undefined);let a;console.log(a);console.log(null);// 一个变量对应一个值,标量
引用类型:array, object, function
// 一个变量保存的是一个集合,并非单值,访问时不能直接访问,必须通过这个变量的引用来访问// 数组// const arr = [1, 2, 3];// const arr = [1, 'admin', true];const arr = [1, 'admin', [1, 2, 3], true];console.log(arr);// 访问数据元素,必须通过数组的引用(数组名称arr)来访问(arr是一个访问入口)// 数组成员 的索引是从0开始console.log(arr[1]);console.log(arr[2][1]);// 引用类型判断不能用typeofconsole.log(typeof arr);console.log(Array.isArray(arr));
// 对象// 先把对象想象成一个关联数组let obj = {id: 1,username: 'jack',num: [1, 2, 3],isOk: true,'my email': '498668472@qq.com',};console.log(arr[1]);console.log(obj['username']);// 为了简化,并与数组区别,对象有自己的成员访问符: .console.log(obj.username);console.log(obj['my email']);function getUser(obj) {return 'id =' + obj.id + ', username =' + obj.username;}console.log(getUser(obj));// 对象是可以将数据与函数封装到一起,做为一个独立的编程单元// 对象字面量obj2 = {id: 1,username: 'jack',num: [1, 2, 3],isOk: true,'my email': '498668472@qq.com',// 将一个函数转为对象的方法,封装到对象中getUser: function() {// 在对象中,使用变量this来引用对象自身return 'id =' + this.id + ', username =' + this.username;},};console.log(obj2.getUser());
函数是对象,也是一个值,可以当成参数传递,也可以当成返回值
//1)参数传递function f1(callback) {console.log(typeof callback);console.log(callback());}f1(function() {return 'Hello aaaa';});//2)返回值: 闭包function f2() {// a是 f2的私有变量let a = 1;return function() {// return (a += 1);// 而此时,子函数中的a并不是自己的,是父函数的return a++;};}console.log(f2());const f = f2();// console.log(f);console.log(f());console.log(f());//3)函数就是对象,对象就可以添加属性和方法
相关推荐
© 2020 asciim码
人生就是一场修行