1、循环:while 和 for

  while 循环

 while(condition){
//代码 循环体
}

 do ... while  循环

 let i =0;
do {
//循环体
}while(condition) let i = 0;
do{
alert(i);
i++;
}while(i<)

  for 循环

 for(begin;condiion;step){
//循环体
} for(let i = 0; i <; i++){
alert(i);
}

  省略语句段

  for 循环 的begin语句段,如果在for循环外定义 则for循环中的 begin 语段不需要如:

 let i = 0;
for(;i <; i++){
alert(i);
}
//或者移除step 语段
let i = 0;
for(;i<3;){
alert(i++);
} 上述写法和 下面写法等价
while(i<3){
alert(i++);
}
for(;;)
{//无限循环}
和下面写法等级
while(true){
//无限循环
}
注意:for循环中的for(;;) {} 的两个分号必须存在,否则会出现语法错误

  跳出循环

  break 关键字可以强制退出关键字

 let sum = 0;
while(true){
sum++;
if(sum>10){
break;
}
}
//此循环本无限循环,但是通过break 关键字,可以在条件下跳出循环,不再执行循环体

  继续下一次迭代

  continue 关键字 是break 的轻量版;不阻止整个循环,知识停止当前的迭代,并强制开启下一次循环的判断是否执行。

 for ( i = 0; i <;i++){
if(i%2==0)continue;
alert(i);
}
//这个循环体,当i为奇数的时候输出,偶数的时候不输出,进入下次循环。

  break/continue 标签

  当我们需要从多个嵌套循环中跳出来的时候,break <lableName>

  当我们需要从多个循环嵌套中跳出,并执行下一次迭代,则可以通过continue <lableName>

  

 outer: for (let i = 0; i <; i++) {

   for (let j = 0; j < 3; j++) {

     let input = prompt(`Value at coords (${i},${j})`, '');

     // 如果是空字符串或已取消,则中断这两个循环。
if (!input) break outer; // (*) // 用得到的值做些事……
}
}
alert('Done!'); 但是标签 不能随意跳到 任何位置
break label; // 跳转到标签?可以。 label: for (...) 只有在循环内部才能调用 break/continue,并且标签必须位于指令上方的某个位置。

2、 switch  语句

语法

switch(x) {
case 'value1': // if (x === 'value1')
...
[break] case 'value2': // if (x === 'value2')
...
[break] default:
...
[break]
}

示例

 let arg = prompt("Enter a value?")
switch (arg) {
case '0':
case '1':
alert( 'One or zero' );
break; case '2':
alert( 'Two' );
break; case 3:
alert( 'Never executes!' );
break;
default:
alert( 'An unknown value' )
} //注意事项 : 传入的参数和case 后的条件进行比较的实收进行的是严格相等,
  也就是必须类型和值完全相等。在上面的例子中输入2会alert(Two), 但是输入3 会
  进入default 因为输入的数据是字符串,不能和数字相等。

  case "": break; 如果case 后未跟着break 关键字,则会出现该case 之后的所有方法都会被执行。

 let a = 2 + 2;

 switch (a) {
case 3:
alert( 'Too small' );
case 4:
alert( 'Exactly!' );//此行之后的所有alert 都会执行
case 5:
alert( 'Too big' );
default:
alert( "I don't know such values" );
}

  case 可以分组

let a = 2 + 2;

switch (a) {
case 4:
alert('Right!');
break; case 3: // (*) 下面这两个 case 被分在一组 当a等于3或者5的时候都会执行
case 5:
alert('Wrong!');
alert("Why don't you take a math class?");
break; default:
alert('The result is strange. Really.');
}

3、函数

概念:函数是程序的主要“构建模块”,函数允许不重复地多次调用代码

函数声明

  

 function name(parameters) {
...body...
}
首先是function关键字,然后是函数名,其次括号之间的参数列表,
  多参数用逗号隔开,最后是花括号之间的代码,即函数体。
//示例 与 调用
function showMessage(){
alert('hello world');
} //调用
showMessage();
showMessage();

局部变量

 function showMessage() {
let message = "Hello, I'm JavaScript!"; // 局部变量 alert( message );
} showMessage(); // Hello, I'm JavaScript! alert( message ); // <-- 错误!变量是函数的局部变量

外部变量

函数可以访问外部变量

 let userName = 'John';

 function showMessage() {
let message = 'Hello, ' + userName;
alert(message);
} showMessage(); // Hello, John

同时可以对外部变量进行修改

 let userName = 'John';

 function showMessage() {
userName = "Bob"; // (1) 改变外部变量 let message = 'Hello, ' + userName;
alert(message);
} alert( userName ); // John 在函数调用之前 showMessage(); alert( userName ); // Bob, 值被函数修改

如果在函数中声明了同名变量,那么它遮蔽外部变量。例如,在如下代码中,函数使用局部的 userName,外部部分被忽略:

let userName = 'John';

function showMessage() {
let userName = "Bob"; // 声明一个局部变量 let message = 'Hello, ' + userName; // Bob
alert(message);
} // 函数会创建并使用它自己的 userName
showMessage(); alert( userName ); // John,未更改,函数没有访问外部变量。

全局变量

任何函数之外声明的变量,例如上述代码中的外部 userName 都称为全局

全局变量在任意函数中都是可见的(除非被局部变量遮蔽)。

减少全局变量的使用是一种很好的做法。现代的代码有很少或没有全局变量。大多数变量存在于它们的函数中。但是有时候,全局变量能够用于存储项目级别的数据。

参数

给函数传递数据

function showMessage(from, text) { // 参数:from、text
alert(from + ': ' + text);
} showMessage('Ann', 'Hello!'); // Ann: Hello! (*)
showMessage('Ann', "What's up?"); // Ann: What's up? (**)

 参数默认值

  参数默认值可以直接用等号赋予,也可以通过函数计算获得

unction showMessage(from, text = "no text given") {
alert( from + ": " + text );
} showMessage("Ann"); // Ann: no text given function showMessage(from, text = getText()) {
// anotherFunction() 仅在没有给定文本时执行
// 其结果变成文本值
} function getText(){
return 'hello world";
}

返回值 return的使用

  return 可以返回函数计算的结果,字符串等

  也可以当做函数的中断执行,返回undefined;没有return 对的函数返回值也为undefined

  不要在return 和返回值之间添加多余的空行,因为,return行的结尾会默认加“;”如果想跨行请用()包裹起来。return相关示例代码如下

 //多个return
function checkAge(age) {
if (age > 18) {
return true;
} else {
return confirm('Got a permission from the parents?');
}
} let age = prompt('How old are you?', 18); if ( checkAge(age) ) {
alert( 'Access granted' );
} else {
alert( 'Access denied' );
} //返回值为undefined
function doNothing() { /* 空代码 */ } alert( doNothing() === undefined ); // true function doNothing() {
return;
} alert( doNothing() === undefined ); // true //跨行返回值
return (
some + long + expression
+ or +
whatever * f(a) + f(b)
)

函数命名

  函数是行为。所以它们的名字通常是动词。它应该简短且尽可能准确地描述函数的作用。

 示例:

  showMessage(..)     // 显示信息
  getAge(..)          // 返回 age (gets it somehow)
  calcSum(..)         // 计算求和并返回结果
  createForm(..)      // 创建表格 (通常会返回它)
  checkPermission(..) // 检查权限并返回 true/false

4、函数表达式和箭头函数

函数表达式

 let sayHello = function(){
alert('hello');
}
//函数表达式可以理解为创建了一个函数 并放进了变量 sayHello sayHello(); 调用该表达式
alert(sayHello);//如果不加“()” 则展示的是JavaScript代码

为什么函数表达式后面要加";"?

 function sayHi() {
// ...
} let sayHi = function() {
// ...
};
在代码块的结尾是不需要 ;,像 if { ... },for { },function f { }
等语法结构后面都不用加。
函数表达式通常这样声明: let sayHi = ...;,作为一个变量。 而不是代码块。
不管什么值,建议在语句结尾处建议使用分号 ;。所以这里的分号与函数表达式本身没
有任何关系,它只是终止了语句。

回调函数

function ask(question, yes, no) {
if (confirm(question)) yes()
else no();
} function showOk() {
alert( "You agreed." );
} function showCancel() {
alert( "You canceled the execution." );
} // usage: functions showOk, showCancel are passed as arguments to ask
ask("Do you agree?", showOk, showCancel);

以上代码示例,即在ask 函数中,如果你点击了确定则会执行传入的yes()函数,否则执行no()函数,在函数内部触发了某一个条件后执行的另一个方法,该方法称为回调函数

函数表达式  vs  函数声明

  第一:函数表达式创建的函数在JavaScript引擎中创建时间会比函数声明晚,当执行到函数表达式才会创建并可以使用,而函数声明创建的函数,则在JavaScript初始化阶段会优先执行函数声明。示例:

 //以下代码会正常运行
sayHi("John"); // Hello, John function sayHi(name) {
alert( `Hello, ${name}` );
} //以下代码不会正常运行
sayHi("John"); // error! let sayHi = function(name) { // (*) no magic any more
alert( `Hello, ${name}` );
};

  第二:正常情况下我们声明一个函数,首先要考虑函数声明语法,当遇到某些特殊情况下则使用函数表达式,如需执行一个函数,这个函数需要在另一个函数内根据条件声明成不同的函数,并要在函数外使用,这种情况下,函数表达式就可以很好的胜任。示例:

 let age = prompt("What is your age?", 18);
let welcome;
if (age <) {
welcome = function() {
alert("Hello!");
};
} else {
welcome = function() {
alert("Greetings!");
}; } welcome();

通过运算符?简化上述例子:

 let age = prompt("What is your age?", 18);

 let welcome = (age <) ?
function() { alert("Hello!"); } :
function() { alert("Greetings!"); }; welcome();

箭头函数

语法:let func = (arg1,arg2,...argN) => expression

 等同于 let  func  = func(arg1,arg2,...argN){return message;}

示例:

 let sum = (a, b) => a + b;

 /* 箭头函数更短:

 let sum = function(a, b) {
return a + b;
};
*/ alert( sum(1, 2) ); // 3 //如果只有一个参数
// same as
// let double = function(n) { return n * 2 }
let double = n => n * 2; alert( double(3) ); // 6 //如果没有参数
let sayHi = () => alert("Hello!"); sayHi();

箭头函数重写 welcome()

 let age = prompt("What is your age?",18);
let welcome = (age <)?
()=>alert('Hello'):
()=>alert('Greetings');
);
welcome();

javaScript 基础知识汇总(三)的更多相关文章

  1. 林大妈的JavaScript基础知识(三):JavaScript编程(2)函数

    JavaScript是一门函数式的面向对象编程语言.了解函数将会是了解对象创建和操作.原型及原型方法.模块化编程等的重要基础.函数包含一组语句,它的主要功能是代码复用.隐藏信息和组合调用.我们编程就是 ...

  2. Jquery源码中的Javascript基础知识(三)

    这篇主要说一下在源码中jquery对象是怎样设计实现的,下面是相关代码的简化版本: (function( window, undefined ) { // code 定义变量 jQuery = fun ...

  3. 林大妈的JavaScript基础知识(三):JavaScript编程(4)数组

    数组,是一段线性分配的,具有非常高性能的数据结构.简单地说,数组以连续的空间存储,通过整数地计算偏移量访问其中的元素,将读取修改的时间复杂度降低至O(1),我们称之为猝发式存取.是不是非常期待?没错, ...

  4. JavaScript基础知识汇总

    1. 图片热区: <img src="logo.jpg" usemap="#logo"> <map id="logo" n ...

  5. JavaScript基础知识(三个判断、三个循环)

    三个判断 if…else…只会执行其中一个条件 如果if条件中只有一个值,那么会默认转布尔: if(1=="1"){ // 当括号中条件为true时,执行此处的代码 console ...

  6. 林大妈的JavaScript基础知识(三):JavaScript编程(3)原型

    在一般的编程语言中,我们使用继承来复用代码,做成良好的数据结构.而在JavaScript中,我们使用原型来实现以上的需求.由于JavaScript专注于对象而摒弃了类,我们要明白原型和继承的确是有差异 ...

  7. javaScript 基础知识汇总(六)

    1.基本类型与对象的区别 基本类型:是原始类型的中的一种值. 在JavaScript中有6中基本类型:string number  boolean  symbol  null  undefined 对 ...

  8. javaScript 基础知识汇总(二)

    1.运算符 术语或者叫法:一元运算符.二元运算符.运算元(参数) let x=0; x=5+2; //5和2为运算元,“+” 为二元运算符: x=-x; //"-" 为一元运算符 ...

  9. javaScript 基础知识汇总 (十二)

    1.属性的标志和描述符 属性的标志 对象属性除value外还有三个特殊属性,即标志 writable ----如果为true,则可以修改,否则它只是只读的. enumerable ----如果为tru ...

随机推荐

  1. 必懂的wenpack优化

    webpack优化 1.production 模式打包自带优化 tree shaking tree shaking是一个术语.通常用于打包时移除js中未引用的代码(dead-code),它依赖于ES6 ...

  2. UPC Contest RankList – 2019年第二阶段我要变强个人训练赛第十六场

    E: 飞碟解除器 •题目描述 wjyyy在玩跑跑卡丁车的时候,获得了一个飞碟解除器,这样他就可以免受飞碟的减速干扰了.飞碟解除器每秒末都会攻击一次飞碟,但每次只有p/q的概率成功攻击飞碟.当飞碟被成功 ...

  3. KNN算法实现手写体区分

    KNN算法在python里面可以使用pip install指令安装,我在实现之前查看过安装的KNN算法,十分全面,包括了对于手写体数据集的处理.我这里只是实现了基础的识别方法,能力有限,没有数据处理方 ...

  4. Jibx 只绑定需要的字段

    栗子:     binding.xml   <?xml version="1.0" encoding="UTF-8"?> <binding&g ...

  5. coffeescript 函数 箭头表达式

    函数 do可以形成闭包,使方法作用域不受外部变化的影响. 隐式返回最后一个表达式的值 函数调用省略括号 用arguments数组访问传递给函数的所有对象(低可读性) @name为this.name的简 ...

  6. 挂起(suspend)与线程阻塞工具类LockSupport

    挂起(suspend)与线程阻塞工具类LockSupport 一般来说是不推荐使用suspend去挂起线程的,因为suspend在导致线程暂停的同时,并不会去释放任何锁资源. 如果其他任何线程想要访问 ...

  7. Appium+python自动化(二十七)-让你在手机找到溜冰一样的感觉666,溜得飞起来 - 低级滑动(超详解)

    简介 随着现在智能手机的普及和应用,小到五六岁或者更小的娃娃,老至七八十岁老头老太太都是智能手机的用户,基本上达到每个人都在用,每次在地铁或者公交上,就看看到这样的场面,手指不停地在手机屏幕上来来回回 ...

  8. 荔枝FM前端面试题

    最近接到了荔枝FM的面试通知,遗憾的是没有拿到offer,但是这次面试呢,还是收获很大的,下面就来给大家说说我遇到的面试题 一面 一面是直接发了一套面试题到邮箱,开启了防作弊的,限时20分钟做完,下面 ...

  9. jQuery插件之路(一)——试着给jQuery的一个Carousel插件添加新的功能

    前几日在网上看到了一个关于Carousel插件的教学视频,于是也顺便跟着学习着做了一下.但是在做完之后发现,在别的网站上面看到类似的效果要比现在做的这个要多一个功能,也就是在底下会有一些按钮,当鼠标放 ...

  10. php sql 类似 mybatis 传参

    PHP sql 处理上,没有类似于 java mybatis 的工具,导致进行一些sql 处理时,会有诸多不便, 楼主抽时间写了一个 php 类似 mybatis 的sql 工具,省去了拼装sql 的 ...