js学习笔记01-函数,作用域,闭包

${var}

//变量的占位符, ${}里边 依旧是js,字符串拼接
var str1 = "Hello";
var str2 = "World";
console.log("say: "+str1+" "+str2+"!");
console.log(`say: ${str1} ${str2}!`);

函数function

像处理(字符串、数组或数字)一样来处理函数
1)存储在变量中。
2)从一个函数返回。
3)作为参数传递给另一个函数

回调函数

接受其他函数作为参数(和/或返回函数,如上一部分所述)的函数被称为高阶函数。作为参数传递给另一个函数的函数被称为回调函数。

数组方法 forEach()遍历数组,map获取数组中元素的详情,filter筛选

forEach()
数组的 forEach() 方法接受一个回调函数,并为数组中的每个元素调用该函数。换句话说,forEach() 让你可以迭代(即遍历)一个数组,类似于使用 for 循环

[1, 5, 2, 4, 6, 3].forEach(function logIfOdd(n) {
  if (n % 2 !== 0) {
    console.log(n);
  }
});
// 1
//5
//3
function logIfOdd(n) {
  if (n % 2 !== 0) {
    console.log(n);
  }
    }
[1, 5, 2, 4, 6, 3].forEach(logIfOdd);

map()
map() 不同于forEach(),会根据回调函数所返回的内容返回一个新的数组。
map() 方法返回一个新的数组,而不会修改原始数组。

var arrayName = ["fish","sugarbeans","theredhands"];
var arrayNameLength = arrayName.map(function(name){
    return name.length;
})
console.log(arrayNameLength);
//[4,10,11]

filter 过滤器
数组的 filter() 方法与 map() 方法类似,

var arrayNewName = arrayName.filter(function(name){
    return name.length>6;
})
console.log(arrayNewName);

作用域

函数的作用域包括:
1)该函数的参数。
2)该函数内部声明的局部变量。
3)来自其父函数作用域的变量。
4)全局变量。
在访问变量时,JavaScript 引擎将遍历作用域链,首先查看最内层(例如函数的局部变量),然后查看外层作用域,最后在必要时到达全局作用域。
变量阴影
当你所创建的变量与作用域链中的另一个变量具有相同名称时
JavaScript 不会弹出错误消息或阻止你创建这样一个变量。实际上,局部作用域的变量只会暂时“遮蔽”外部作用域中的变量。这被称为变量阴影。

let n = 2;
function myFunction() {
  let n = 8;
  console.log(n);
}
myFunction();
// 8

闭包

闭包--函数和该函数声明位置的词法环境的组合
1)每次定义函数时,都会为该函数创建闭包
2)函数会保持对其父作用域的引用, 如果仍可访问该函数的引用,作用域就会保持不变
3)闭包类似java私有属性的机制

function count() {
    var arr = [];
    for (var i=1; i<=3; i++) {
        arr.push(function () {
            return i * i;
        });
    }
    return arr;
}
var results = count();
var f1 = results[0]; //()=>16
var f2 = results[1]; //()=>16
var f3 = results[2]; //()16

立即调用函数表达式(IIFE)

定义之后立即被调用的函数
将一个函数包在圆括号中,然后在末尾添加一对圆括号来调用它

(function sayHi(){
    alert(‘Hi there!‘);
  })();
    //带参数
(function (x, y){
    console.log(x * y);
  })(2, 3);   // 6

IIFE 的主要用途之一就是创建私有作用域
如果你只想完成某个一次性任务(例如初始化应用程序),那么 IIFE 将是完成任务,同时避免额外变量污染全局环境的好办法

原文地址:http://blog.51cto.com/5845595/2115676

时间: 2024-08-03 20:09:53

js学习笔记01-函数,作用域,闭包的相关文章

swift学习笔记2——函数、闭包

阅读目录 函数 闭包 之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询用.详细可以参考the-swift-programming-language-in-chinese,或者苹果官方英文版文档 当前版本是swift2.2 函数 func sayHello(personName: String, alreadyGreeted: Bool) -> S

JS学习笔记3_函数表达式

1.函数表达式与函数声明的区别 函数声明有“提升”(hoisting)的特性,而函数表达式没有.也就是说,函数声明会在加载代码时被预先加载到context中,而函数表达式只有在执行表达式语句时才会被加载 2.闭包 有权访问另一个函数作用域中的变量的函数.闭包可以访问另一个作用域中的变量,因此闭包得到的变量值是最终值,而不是该变量在某一时刻的值,有一个很经典的例子: function createFuns(){ var result = new Array(); for(var i = 0;i <

面向于初学者的Node.js学习笔记 01 搭建静态服务器

希望这篇文章能解决你这样一个问题:“我现在已经了解了一些Node.Js基本概念了,怎么搭一台静态服务器呢?” 请参考一下博主的前两篇文章: 完全面向于初学者的Node.js指南 Node.Js的Module System 以及一些常用 Module 本文实现的效果(样式就没做了,大家将就下): 列出的代码均测试可用,大家放心. What is static server? 静态服务器,有了它呢,就可以让外部访问到咱们的静态网页.在功能上:它可以给用户发送文件(如:HTML, CSS, Js等).

js学习笔记04-ES6函数(箭头函数与this),class

箭头函数 让简短单行函数更容易编写和阅读的普通函数可以是函数声明或函数表达式,但是箭头函数始终是表达式普通函数(把名字转换为大写) const upperNames = ['Fish', 'RedHands', 'Sugarbeans'].map(function(name) { return name.toUpperCase(); }); 将函数转换为箭头函数,函数主体只有一个表达式,简写主体语法1)删掉关键字 function2)删掉圆括号3)删掉左右花括号4)删掉关键字 return5)删

scala 学习笔记(01) 函数定义、分支、循环、异常处理、递归

package yjmyzz import scala.io.StdIn object ScalaApp { def main(args: Array[String]) { println("please input something,press Enter to exit:") //每一行最后加不加分号都可以 readKeyboard //注:无参数的函数调用,加不加括号都行 println(add(1, 2) + "\n------\n") println(d

sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map)

sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map) 这几天学习和查看了jQuery和Property这两个很流行的前端库的御用选择器组件Sizzle.js的源代码,收获还是相对多的!之前一直做使用Java语言开发,其丰富的组件类库使得开发效率那叫一个快呀!突然转来做JavaScript一时间还有点儿不适应(快半年了),不过自从看见那么多漂亮的网站和对JavaScript接触的越来越多,也发现了其中的一些乐趣.正如自己一直坚信的那样,编程语言仅仅是工具,重要的是编程思想!使用Jav

JS学习笔记-OO疑问之封装

封装是面向对象的基础,今天所要学习的匿名函数与闭包就是为了实现JS的面向对象封装.封装实现.封装变量,提高数据.系统安全性,封装正是面向对象的基础. 匿名函数 即没有名字的函数,其创建方式为 function(){...} 单独存在的匿名函数,无法运行,可通过赋值给变量调用或通过表达式自我执行来实现运行. 1.赋值给变量为一般的函数使用方式 var run = function(){ return '方法运行中'; }; alert(run()); 2.通过表达式自我执行 (function(a

Angular JS 学习笔记

特定领域语言 编译器:遍历DOM来查找和它相关的属性, 分为编译和链接两个阶段, 指令:当关联的HTML结构进入编译阶段时应该执行的操作,可以写在名称里,属性里,css类名里:本质上是函数 稳定的DOM:绑定了数据模型的DOM元素的实例不会在绑定的生命周期发生改变 作用域:用来检测模型的改变和为表达式提供执行上下文的 AngularJS 和其它模板系统不同,它使用的是DOM而不是字符串 指令: 由某个属性.元素名称.css类名出现而导致的行为,或者说是DOM的变化 Filter过滤器:扮演着数据

Vue.js学习笔记:在元素 和 template 中使用 v-if 指令

f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title></title> <script src="https://cdn.bootcss.com/vue/2.2.