久久精品中文字幕av,av.涩涩涩涩涩涩涩涩,亚洲国产日韩欧美精品成人久久久,成人福利电影免费在线观看,日产国产原创av,日韩av午夜激情,bt天堂中文字幕,超级碰人妻在线视频,欧美老熟妇久久一区二区

企業(yè)??AI智能體構(gòu)建引擎,智能編排和調(diào)試,一鍵部署,支持知識(shí)庫和私有化部署方案 廣告
## Chapter 2 # Program Structure > [](http://eloquentjavascript.net/02_program_structure.html#p_J/zCYrllfQ)And my heart glows bright red under my filmy, translucent skin and they have to administer 10cc of JavaScript to get me to come back. (I respond well to toxins in the blood.) Man, that stuff will kick the peaches right out your gills! > > _why,?Why's (Poignant) Guide to Ruby [](http://eloquentjavascript.net/02_program_structure.html#p_x4mfX9d1CF)In this chapter, we will start to do things that can actually be called*programming*. We will expand our command of the JavaScript language beyond the nouns and sentence fragments we’ve seen so far, to the point where we can express some meaningful prose. ## [](http://eloquentjavascript.net/02_program_structure.html#h_5fUOQZwwHx)Expressions and statements [](http://eloquentjavascript.net/02_program_structure.html#p_EuyWCUdM/0)In?[Chapter 1](http://eloquentjavascript.net/01_values.html#values), we made some values and then applied operators to them to get new values. Creating values like this is an essential part of every JavaScript program, but it is only a part. [](http://eloquentjavascript.net/02_program_structure.html#p_8CCep1TQ8b)A fragment of code that produces a value is called an?*expression*. Every value that is written literally (such as?`22`?or?`"psychoanalysis"`) is an expression. An expression between parentheses is also an expression, as is a binary operator applied to two expressions or a unary operator applied to one. [](http://eloquentjavascript.net/02_program_structure.html#p_QXQG3kVSFh)This shows part of the beauty of a language-based interface. Expressions can nest in a way very similar to the way subsentences in human languages are nested—a subsentence can contain its own subsentences, and so on. This allows us to combine expressions to express arbitrarily complex computations. [](http://eloquentjavascript.net/02_program_structure.html#p_K6OJ6JuFaH)If an expression corresponds to a sentence fragment, a JavaScript?*statement*corresponds to a full sentence in a human language. A program is simply a list of statements. [](http://eloquentjavascript.net/02_program_structure.html#p_NAzxo1M6WC)The simplest kind of statement is an expression with a semicolon after it. This is a program: ~~~ edit & run code by clicking it1; !false; ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_dj4UvUmws0)It is a useless program, though. An expression can be content to just produce a value, which can then be used by the enclosing expression. A statement stands on its own and amounts to something only if it affects the world. It could display something on the screen—that counts as changing the world—or it could change the internal state of the machine in a way that will affect the statements that come after it. These changes are called?*side effects*. The statements in the previous example just produce the values?`1`?and?`true`?and then immediately throw them away. This leaves no impression on the world at all. When executing the program, nothing observable happens. [](http://eloquentjavascript.net/02_program_structure.html#p_neJqLsvK+g)In some cases, JavaScript allows you to omit the semicolon at the end of a statement. In other cases, it has to be there, or the next line will be treated as part of the same statement. The rules for when it can be safely omitted are somewhat complex and error-prone. In this book, every statement that needs a semicolon will always be terminated by one. I recommend you do the same in your own programs, at least until you’ve learned more about subtleties involved in leaving out semicolons. ## [](http://eloquentjavascript.net/02_program_structure.html#h_rAGNsfewCX)Variables [](http://eloquentjavascript.net/02_program_structure.html#p_i0lKsEoj6z)How does a program keep an internal state? How does it remember things? We have seen how to produce new values from old values, but this does not change the old values, and the new value has to be immediately used or it will dissipate again. To catch and hold values, JavaScript provides a thing called a*variable*. ~~~ var caught = 5 * 5; ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_Jhk5gi+tgk)And that gives us our second kind of statement. The special word (*keyword*)`var`?indicates that this sentence is going to define a variable. It is followed by the name of the variable and, if we want to immediately give it a value, by an`=`?operator and an expression. [](http://eloquentjavascript.net/02_program_structure.html#p_EkxlfkTaWl)The previous statement creates a variable called?`caught`?and uses it to grab hold of the number that is produced by multiplying 5 by 5. [](http://eloquentjavascript.net/02_program_structure.html#p_Fh873D6aQC)After a variable has been defined, its name can be used as an expression. The value of such an expression is the value the variable currently holds. Here’s an example: ~~~ var ten = 10; console.log(ten * ten); // → 100 ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_TPVvmRq49D)Variable names can be any word that isn’t a reserved word (such as?`var`). They may not include spaces. Digits can also be part of variable names—`catch22`?is a valid name, for example—but the name must not start with a digit. A variable name cannot include punctuation, except for the characters?`$`and?`_`. [](http://eloquentjavascript.net/02_program_structure.html#p_ew9BThyy9D)When a variable points at a value, that does not mean it is tied to that value forever. The?`=`?operator can be used at any time on existing variables to disconnect them from their current value and have them point to a new one. ~~~ var mood = "light"; console.log(mood); // → light mood = "dark"; console.log(mood); // → dark ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_tdX1rrdcPQ)You should imagine variables as tentacles, rather than boxes. They do not*contain*?values; they?*grasp*?them—two variables can refer to the same value. A program can access only the values that it still has a hold on. When you need to remember something, you grow a tentacle to hold on to it or you reattach one of your existing tentacles to it. ![](https://box.kancloud.cn/2015-10-31_563439a826ae7.jpg) [](http://eloquentjavascript.net/02_program_structure.html#p_bJwHD1AmQW)Let’s look at an example. To remember the number of dollars that Luigi still owes you, you create a variable. And then when he pays back $35, you give this variable a new value. ~~~ var luigisDebt = 140; luigisDebt = luigisDebt - 35; console.log(luigisDebt); // → 105 ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_Kti5/Q6NH3)When you define a variable without giving it a value, the tentacle has nothing to grasp, so it ends in thin air. If you ask for the value of an empty variable, you’ll get the value?`undefined`. [](http://eloquentjavascript.net/02_program_structure.html#p_/AKSyKwnu0)A single?`var`?statement may define multiple variables. The definitions must be separated by commas. ~~~ var one = 1, two = 2; console.log(one + two); // → 3 ~~~ ## [](http://eloquentjavascript.net/02_program_structure.html#h_ko4pqLOTdI)Keywords and reserved words [](http://eloquentjavascript.net/02_program_structure.html#p_GioEDRc+dl)Words with a special meaning, such as?`var`, are?*keywords*, and they may not be used as variable names. There are also a number of words that are “reserved for use” in future versions of JavaScript. These are also officially not allowed to be used as variable names, though some JavaScript environments do allow them. The full list of keywords and reserved words is rather long. ~~~ break case catch class const continue debugger default delete do else enum export extends false finally for function if implements import in instanceof interface let new null package private protected public return static super switch this throw true try typeof var void while with yield ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_0pDQHpgrM3)Don’t worry about memorizing these, but remember that this might be the problem when a variable definition does not work as expected. ## [](http://eloquentjavascript.net/02_program_structure.html#h_2Tc54fkIgF)The environment [](http://eloquentjavascript.net/02_program_structure.html#p_tJKFexJV/j)The collection of variables and their values that exist at a given time is called the?*environment*. When a program starts up, this environment is not empty. It always contains variables that are part of the language standard, and most of the time, it has variables that provide ways to interact with the surrounding system. For example, in a browser, there are variables and functions to inspect and influence the currently loaded website and to read mouse and keyboard input. ## [](http://eloquentjavascript.net/02_program_structure.html#h_K5Yd6h3Axg)Functions [](http://eloquentjavascript.net/02_program_structure.html#p_S7KjMy3yAl)A lot of the values provided in the default environment have the type?*function*. A function is a piece of program wrapped in a value. Such values can be*applied*?in order to run the wrapped program. For example, in a browser environment, the variable?`alert`?holds a function that shows a little dialog box with a message. It is used like this: ~~~ alert("Good morning!"); ~~~ ![](https://box.kancloud.cn/2015-10-31_563439a848cb7.png) [](http://eloquentjavascript.net/02_program_structure.html#p_9qu6Ki2/lH)Executing a function is called?*invoking*,?*calling*, or?*applying*?it. You can call a function by putting parentheses after an expression that produces a function value. Usually you’ll directly use the name of the variable that holds the function. The values between the parentheses are given to the program inside the function. In the example, the?`alert`?function uses the string that we give it as the text to show in the dialog box. Values given to functions are called*arguments*. The?`alert`?function needs only one of them, but other functions might need a different number or different types of arguments. ## [](http://eloquentjavascript.net/02_program_structure.html#h_6+Vb3XQoaa)The console.log function [](http://eloquentjavascript.net/02_program_structure.html#p_HDjV1sA8vQ)The?`alert`?function can be useful as an output device when experimenting, but clicking away all those little windows will get on your nerves. In past examples, we’ve used?`console.log`?to output values. Most JavaScript systems (including all modern web browsers and Node.js) provide a`console.log`?function that writes out its arguments to?*some*?text output device. In browsers, the output lands in the JavaScript console. This part of the browser interface is hidden by default, but most browsers open it when you press F12 or, on Mac, when you press Command-Option-I. If that does not work, search through the menus for an item named “web console” or “developer tools”. [](http://eloquentjavascript.net/02_program_structure.html#p_bTfrhpuIIt)When running the examples, or your own code, on the pages of this book,`console.log`?output will be shown after the example, instead of in the browser’s JavaScript console. ~~~ var x = 30; console.log("the value of x is", x); // → the value of x is 30 ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_lKC7MRhfz2)Though variable names cannot contain period characters,?`console.log`clearly has one. This is because?`console.log`?isn’t a simple variable. It is actually an expression that retrieves the?`log`?property from the value held by the?`console`?variable. We will find out exactly what this means in?[Chapter 4](http://eloquentjavascript.net/04_data.html#properties). ## [](http://eloquentjavascript.net/02_program_structure.html#h_nULi9znEdr)Return values [](http://eloquentjavascript.net/02_program_structure.html#p_cJD1JUU5+H)Showing a dialog box or writing text to the screen is a?*side effect*. A lot of functions are useful because of the side effects they produce. Functions may also produce values, and in that case, they don’t need to have a side effect to be useful. For example, the function?`Math.max`?takes any number of number values and gives back the greatest. ~~~ console.log(Math.max(2, 4)); // → 4 ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_n4ne85oslE)When a function produces a value, it is said to?*return*?that value. Anything that produces a value is an expression in JavaScript, which means function calls can be used within larger expressions. Here a call to?`Math.min`, which is the opposite of?`Math.max`, is used as an input to the plus operator: ~~~ console.log(Math.min(2, 4) + 100); // → 102 ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_bhFVJn8rDc)The?[next chapter](http://eloquentjavascript.net/03_functions.html#functions)?explains how to write your own functions. ## [](http://eloquentjavascript.net/02_program_structure.html#h_1nddjRgQ5+)prompt and confirm [](http://eloquentjavascript.net/02_program_structure.html#p_tJIGQUSpum)Browser environments contain other functions besides?`alert`?for popping up windows. You can ask the user an OK/Cancel question using?`confirm`. This returns a Boolean:?`true`?if the user clicks OK and?`false`?if the user clicks Cancel. ~~~ confirm("Shall we, then?"); ~~~ ![](https://box.kancloud.cn/2015-10-31_563439a853040.png) [](http://eloquentjavascript.net/02_program_structure.html#p_+abQLgqQ+O)The?`prompt`?function can be used to ask an “open” question. The first argument is the question, the second one is the text that the user starts with. A line of text can be typed into the dialog window, and the function will return this text as a string. ~~~ prompt("Tell me everything you know.", "..."); ~~~ ![](https://box.kancloud.cn/2015-10-31_563439a85f1f5.png) [](http://eloquentjavascript.net/02_program_structure.html#p_mGjwXljToy)These two functions aren’t used much in modern web programming, mostly because you have no control over the way the resulting windows look, but they are useful for toy programs and experiments. ## [](http://eloquentjavascript.net/02_program_structure.html#h_rDxYNPd65Z)Control flow [](http://eloquentjavascript.net/02_program_structure.html#p_QdCrOXOgYy)When your program contains more than one statement, the statements are executed, predictably, from top to bottom. As a basic example, this program has two statements. The first one asks the user for a number, and the second, which is executed afterward, shows the square of that number. ~~~ var theNumber = Number(prompt("Pick a number", "")); alert("Your number is the square root of " + theNumber * theNumber); ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_aq3OoDkq71)The function?`Number`?converts a value to a number. We need that conversion because the result of?`prompt`?is a string value, and we want a number. There are similar functions called?`String`?and?`Boolean`?that convert values to those types. [](http://eloquentjavascript.net/02_program_structure.html#p_M37XqCwh0I)Here is the rather trivial schematic representation of straight control flow: ![](https://box.kancloud.cn/2015-10-31_563439a86c0c0.svg) ## [](http://eloquentjavascript.net/02_program_structure.html#h_wpz5oi2dy7)Conditional execution [](http://eloquentjavascript.net/02_program_structure.html#p_u+xpyPmLV8)Executing statements in straight-line order isn’t the only option we have. An alternative is?*conditional execution*, where we choose between two different routes based on a Boolean value, like this: ![](https://box.kancloud.cn/2015-10-31_563439a878705.svg) [](http://eloquentjavascript.net/02_program_structure.html#p_+kdDcK9eLo)Conditional execution is written with the?`if`?keyword in JavaScript. In the simple case, we just want some code to be executed if, and only if, a certain condition holds. For example, in the previous program, we might want to show the square of the input only if the input is actually a number. ~~~ var theNumber = Number(prompt("Pick a number", "")); if (!isNaN(theNumber)) alert("Your number is the square root of " + theNumber * theNumber); ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_d0Z3YQB6e1)With this modification, if you enter “cheese”, no output will be shown. [](http://eloquentjavascript.net/02_program_structure.html#p_QqE0pn6CUK)The keyword?`if`?executes or skips a statement depending on the value of a Boolean expression. The deciding expression is written after the keyword, between parentheses, followed by the statement to execute. [](http://eloquentjavascript.net/02_program_structure.html#p_nJcsWbCJmU)The?`isNaN`?function is a standard JavaScript function that returns?`true`?only if the argument it is given is?`NaN`. The?`Number`?function happens to return?`NaN`when you give it a string that doesn’t represent a valid number. Thus, the condition translates to “unless?`theNumber`?is not-a-number, do this”. [](http://eloquentjavascript.net/02_program_structure.html#p_l1EGERvXxU)You often won’t just have code that executes when a condition holds true, but also code that handles the other case. This alternate path is represented by the second arrow in the diagram. The?`else`?keyword can be used, together with`if`, to create two separate, alternative execution paths. ~~~ var theNumber = Number(prompt("Pick a number", "")); if (!isNaN(theNumber)) alert("Your number is the square root of " + theNumber * theNumber); else alert("Hey. Why didn't you give me a number?"); ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_ZmJjq4NvCB)If we have more than two paths to choose from, multiple?`if`/`else`?pairs can be “chained” together. Here’s an example: ~~~ var num = Number(prompt("Pick a number", "0")); if (num < 10) alert("Small"); else if (num < 100) alert("Medium"); else alert("Large"); ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_6w2546HxbK)The program will first check whether?`num`?is less than 10\. If it is, it chooses that branch, shows?`"Small"`, and is done. If it isn’t, it takes the?`else`?branch, which itself contains a second?`if`. If the second condition (`< 100`) holds, that means the number is between 10 and 100, and?`"Medium"`?is shown. If it doesn’t, the second, and last,?`else`?branch is chosen. [](http://eloquentjavascript.net/02_program_structure.html#p_JniuPPdJZD)The flow chart for this program looks something like this: ![](https://box.kancloud.cn/2015-10-31_563439a886e73.svg) ## [](http://eloquentjavascript.net/02_program_structure.html#h_FaGGgUI+MM)while and do loops [](http://eloquentjavascript.net/02_program_structure.html#p_FIHE6k56BA)Consider a program that prints all even numbers from 0 to 12\. One way to write this is as follows: ~~~ console.log(0); console.log(2); console.log(4); console.log(6); console.log(8); console.log(10); console.log(12); ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_r1EVilCb9Y)That works, but the idea of writing a program is to make something?*less*?work, not more. If we needed all even numbers less than 1,000, the previous would be unworkable. What we need is a way to repeat some code. This form of control flow is called a?*loop*: ![](https://box.kancloud.cn/2015-10-31_563439a898111.svg) [](http://eloquentjavascript.net/02_program_structure.html#p_1PXG58nhBq)Looping control flow allows us to go back to some point in the program where we were before and repeat it with our current program state. If we combine this with a variable that counts, we can do something like this: ~~~ var number = 0; while (number <= 12) { console.log(number); number = number + 2; } // → 0 // → 2 // … etcetera ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_tCSkGQTO9J)A statement starting with the keyword?`while`?creates a loop. The word?`while`is followed by an expression in parentheses and then a statement, much like`if`. The loop executes that statement as long as the expression produces a value that is?`true`?when converted to Boolean type. [](http://eloquentjavascript.net/02_program_structure.html#p_iwEcAR3f0a)In this loop, we want to both print the current number and add two to our variable. Whenever we need to execute multiple statements inside a loop, we wrap them in curly braces (`{`?and?`}`). Braces do for statements what parentheses do for expressions: they group them together, making them count as a single statement. A sequence of statements wrapped in braces is called a*block*. [](http://eloquentjavascript.net/02_program_structure.html#p_UxO2K/wbSG)Many JavaScript programmers wrap every single loop or?`if`?body in braces. They do this both for the sake of consistency and to avoid having to add or remove braces when changing the number of statements in the body later. In this book, I will write most single-statement bodies without braces, since I value brevity. You are free to go with whichever style you prefer. [](http://eloquentjavascript.net/02_program_structure.html#p_5AsEqW7qSx)The variable?`number`?demonstrates the way a variable can track the progress of a program. Every time the loop repeats,?`number`?is incremented by?`2`. Then, at the beginning of every repetition, it is compared with the number?`12`?to decide whether the program has done all the work it intended to do. [](http://eloquentjavascript.net/02_program_structure.html#p_eimxKSJFYF)As an example that actually does something useful, we can now write a program that calculates and shows the value of 210?(2 to the 10th power). We use two variables: one to keep track of our result and one to count how often we have multiplied this result by 2\. The loop tests whether the second variable has reached 10 yet and then updates both variables. ~~~ var result = 1; var counter = 0; while (counter < 10) { result = result * 2; counter = counter + 1; } console.log(result); // → 1024 ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_MERlXZu4+T)The counter could also start at?`1`?and check for?`<= 10`, but, for reasons that will become apparent in?[Chapter 4](http://eloquentjavascript.net/04_data.html#array_indexing), it is a good idea to get used to counting from 0. [](http://eloquentjavascript.net/02_program_structure.html#p_vrOESKfZl/)The?`do`?loop is a control structure similar to the?`while`?loop. It differs only on one point: a?`do`?loop always executes its body at least once, and it starts testing whether it should stop only after that first execution. To reflect this, the test appears after the body of the loop: ~~~ do { var yourName = prompt("Who are you?"); } while (!yourName); console.log(yourName); ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_gpU7uCWE2q)This program will force you to enter a name. It will ask again and again until it gets something that is not an empty string. Applying the?`!`?operator will convert a value to Boolean type before negating it, and all strings except?`""`convert to?`true`. This means the loop continues going round until you provide a name that is not the empty string. ## [](http://eloquentjavascript.net/02_program_structure.html#h_3I0M2f1Cmh)Indenting Code [](http://eloquentjavascript.net/02_program_structure.html#p_GLz5olRt8V)You’ve probably noticed the spaces I put in front of some statements. In JavaScript, these are not required—the computer will accept the program just fine without them. In fact, even the line breaks in programs are optional. You could write a program as a single long line if you felt like it. The role of the indentation inside blocks is to make the structure of the code stand out. In complex code, where new blocks are opened inside other blocks, it can become hard to see where one block ends and another begins. With proper indentation, the visual shape of a program corresponds to the shape of the blocks inside it. I like to use two spaces for every open block, but tastes differ—some people use four spaces, and some people use tab characters. ## [](http://eloquentjavascript.net/02_program_structure.html#h_oupMC+5FKN)for loops [](http://eloquentjavascript.net/02_program_structure.html#p_t55fBgZ9ww)Many loops follow the pattern seen in the previous?`while`?examples. First, a “counter” variable is created to track the progress of the loop. Then comes a`while`?loop, whose test expression usually checks whether the counter has reached some boundary yet. At the end of the loop body, the counter is updated to track progress. [](http://eloquentjavascript.net/02_program_structure.html#p_i8KoivP+MV)Because this pattern is so common, JavaScript and similar languages provide a slightly shorter and more comprehensive form, the?`for`?loop. ~~~ for (var number = 0; number <= 12; number = number + 2) console.log(number); // → 0 // → 2 // … etcetera ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_dGpYwDLcUj)This program is exactly equivalent to the?[earlier](http://eloquentjavascript.net/02_program_structure.html#loops)?even-number-printing example. The only change is that all the statements that are related to the “state” of the loop are now grouped together. [](http://eloquentjavascript.net/02_program_structure.html#p_LW20YJQoF9)The parentheses after a?`for`?keyword must contain two semicolons. The part before the first semicolon?*initializes*?the loop, usually by defining a variable. The second part is the expression that?*checks*?whether the loop must continue. The final part?*updates*?the state of the loop after every iteration. In most cases, this is shorter and clearer than a?`while`?construct. [](http://eloquentjavascript.net/02_program_structure.html#p_Rst5RlpePZ)Here is the code that computes 210, using?`for`?instead of?`while`: ~~~ var result = 1; for (var counter = 0; counter < 10; counter = counter + 1) result = result * 2; console.log(result); // → 1024 ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_pNim3UxKW2)Note that even though no block is opened with a?`{`, the statement in the loop is still indented two spaces to make it clear that it “belongs” to the line before it. ## [](http://eloquentjavascript.net/02_program_structure.html#h_WWKAoSPJ47)Breaking Out of a Loop [](http://eloquentjavascript.net/02_program_structure.html#p_ct/RAqWly8)Having the loop’s condition produce?`false`?is not the only way a loop can finish. There is a special statement called?`break`?that has the effect of immediately jumping out of the enclosing loop. [](http://eloquentjavascript.net/02_program_structure.html#p_Vnm45Nv5hS)This program illustrates the?`break`?statement. It finds the first number that is both greater than or equal to 20 and divisible by 7. ~~~ for (var current = 20; ; current++) { if (current % 7 == 0) break; } console.log(current); // → 21 ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_6KpM9sBZ2r)Using the remainder (`%`) operator is an easy way to test whether a number is divisible by another number. If it is, the remainder of their division is zero. [](http://eloquentjavascript.net/02_program_structure.html#p_3UnZkFW7lj)The?`for`?construct in the example does not have a part that checks for the end of the loop. This means that the loop will never stop unless the?`break`statement inside is executed. [](http://eloquentjavascript.net/02_program_structure.html#p_2mGltrXORo)If you were to leave out that?`break`?statement or accidentally write a condition that always produces?`true`, your program would get stuck in an*infinite loop*. A program stuck in an infinite loop will never finish running, which is usually a bad thing. [](http://eloquentjavascript.net/02_program_structure.html#p_0F9xH2r4jT)If you create an infinite loop in one of the examples on these pages, you’ll usually be asked whether you want to stop the script after a few seconds. If that fails, you will have to close the tab that you’re working in, or on some browsers close your whole browser, in order to recover. [](http://eloquentjavascript.net/02_program_structure.html#p_f7LsUmJq1I)The?`continue`?keyword is similar to?`break`, in that it influences the progress of a loop. When?`continue`?is encountered in a loop body, control jumps out of the body and continues with the loop’s next iteration. ## [](http://eloquentjavascript.net/02_program_structure.html#h_TGUhwjSkqm)Updating variables succinctly [](http://eloquentjavascript.net/02_program_structure.html#p_4XaFXVHI9b)Especially when looping, a program often needs to “update” a variable to hold a value based on that variable’s previous value. ~~~ counter = counter + 1; ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_n9PMtWEgzN)JavaScript provides a shortcut for this: ~~~ counter += 1; ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_3IlWnnMlMo)Similar shortcuts work for many other operators, such as?`result *= 2`?to double?`result`?or?`counter -= 1`?to count downward. [](http://eloquentjavascript.net/02_program_structure.html#p_+odXBLNKvV)This allows us to shorten our counting example a little more. ~~~ for (var number = 0; number <= 12; number += 2) console.log(number); ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_jpGEbhH1GX)For?`counter += 1`?and?`counter -= 1`, there are even shorter equivalents:`counter++`?and?`counter--`. ## [](http://eloquentjavascript.net/02_program_structure.html#h_jMKsa0SXdL)Dispatching on a value with switch [](http://eloquentjavascript.net/02_program_structure.html#p_t3Fw/3tp0F)It is common for code to look like this: ~~~ if (variable == "value1") action1(); else if (variable == "value2") action2(); else if (variable == "value3") action3(); else defaultAction(); ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_NAtglzdIez)There is a construct called?`switch`?that is intended to solve such a “dispatch” in a more direct way. Unfortunately, the syntax JavaScript uses for this (which it inherited from the C/Java line of programming languages) is somewhat awkward—a chain of?`if`?statements often looks better. Here is an example: ~~~ switch (prompt("What is the weather like?")) { case "rainy": console.log("Remember to bring an umbrella."); break; case "sunny": console.log("Dress lightly."); case "cloudy": console.log("Go outside."); break; default: console.log("Unknown weather type!"); break; } ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_25X42G30Nq)You may put any number of?`case`?labels inside the block opened by?`switch`. The program will jump to the label that corresponds to the value that?`switch`was given or to?`default`?if no matching value is found. It starts executing statements there, even if they’re under another label, until it reaches a?`break`statement. In some cases, such as the?`"sunny"`?case in the example, this can be used to share some code between cases (it recommends going outside for both sunny and cloudy weather). But beware: it is easy to forget such a?`break`, which will cause the program to execute code you do not want executed. ## [](http://eloquentjavascript.net/02_program_structure.html#h_t54vuASjLD)Capitalization [](http://eloquentjavascript.net/02_program_structure.html#p_3D9T5AdSU0)Variable names may not contain spaces, yet it is often helpful to use multiple words to clearly describe what the variable represents. These are pretty much your choices for writing a variable name with several words in it: ~~~ fuzzylittleturtle fuzzy_little_turtle FuzzyLittleTurtle fuzzyLittleTurtle ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_iHeX2bOrpK)The first style can be hard to read. Personally, I like the look of the underscores, though that style is a little painful to type. The standard JavaScript functions, and most JavaScript programmers, follow the bottom style—they capitalize every word except the first. It is not hard to get used to little things like that, and code with mixed naming styles can be jarring to read, so we will just follow this convention. [](http://eloquentjavascript.net/02_program_structure.html#p_zMlRK/pymj)In a few cases, such as the?`Number`?function, the first letter of a variable is also capitalized. This was done to mark this function as a constructor. What a constructor is will become clear in?[Chapter 6](http://eloquentjavascript.net/06_object.html#constructors). For now, the important thing is not to be bothered by this apparent lack of consistency. ## [](http://eloquentjavascript.net/02_program_structure.html#h_/OBuIOX390)Comments [](http://eloquentjavascript.net/02_program_structure.html#p_0/Ms9AYRwI)Often, raw code does not convey all the information you want a program to convey to human readers, or it conveys it in such a cryptic way that people might not understand it. At other times, you might just feel poetic or want to include some thoughts as part of your program. This is what?*comments*?are for. [](http://eloquentjavascript.net/02_program_structure.html#p_c5N0ebF2ts)A comment is a piece of text that is part of a program but is completely ignored by the computer. JavaScript has two ways of writing comments. To write a single-line comment, you can use two slash characters (`//`) and then the comment text after it. ~~~ var accountBalance = calculateBalance(account); // It's a green hollow where a river sings accountBalance.adjust(); // Madly catching white tatters in the grass. var report = new Report(); // Where the sun on the proud mountain rings: addToReport(accountBalance, report); // It's a little valley, foaming like light in a glass. ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_UD6DcJKN/S)A?`//`?comment goes only to the end of the line. A section of text between?`/*`and?`*/`?will be ignored, regardless of whether it contains line breaks. This is often useful for adding blocks of information about a file or a chunk of program. ~~~ /* I first found this number scrawled on the back of one of my notebooks a few years ago. Since then, it has often dropped by, showing up in phone numbers and the serial numbers of products that I've bought. It obviously likes me, so I've decided to keep it. */ var myNumber = 11213; ~~~ ## [](http://eloquentjavascript.net/02_program_structure.html#h_ErccPg/l98)Summary [](http://eloquentjavascript.net/02_program_structure.html#p_qenTzu+nvg)You now know that a program is built out of statements, which themselves sometimes contain more statements. Statements tend to contain expressions, which themselves can be built out of smaller expressions. [](http://eloquentjavascript.net/02_program_structure.html#p_KbysBfaBh4)Putting statements after one another gives you a program that is executed from top to bottom. You can introduce disturbances in the flow of control by using conditional (`if`,?`else`, and?`switch`) and looping (`while`,?`do`, and?`for`) statements. [](http://eloquentjavascript.net/02_program_structure.html#p_cDVCQB0d+r)Variables can be used to file pieces of data under a name, and they are useful for tracking state in your program. The environment is the set of variables that are defined. JavaScript systems always put a number of useful standard variables into your environment. [](http://eloquentjavascript.net/02_program_structure.html#p_zgNEy0za9M)Functions are special values that encapsulate a piece of program. You can invoke them by writing?`functionName(argument1, argument2)`. Such a function call is an expression, and may produce a value. ## [](http://eloquentjavascript.net/02_program_structure.html#h_TcUD2vzyMe)Exercises [](http://eloquentjavascript.net/02_program_structure.html#p_Uj/Ehlt+c3)If you are unsure how to try your solutions to exercises, refer to the[introduction](http://eloquentjavascript.net/00_intro.html#intro). [](http://eloquentjavascript.net/02_program_structure.html#p_VR0+805/R0)Each exercise starts with a problem description. Read that and try to solve the exercise. If you run into problems, consider reading the hints after the exercise. Full solutions to the exercises are not included in this book, but you can find them online at?[*eloquentjavascript.net/code*](http://eloquentjavascript.net/code). If you want to learn something from the exercises, I recommend looking at the solutions only after you’ve solved the exercise, or at least after you’ve attacked it long and hard enough to have a slight headache. ### [](http://eloquentjavascript.net/02_program_structure.html#h_umoXp9u0e7)Looping a triangle [](http://eloquentjavascript.net/02_program_structure.html#p_pP646YLlGy)Write a loop that makes seven calls to?`console.log`?to output the following triangle: ~~~ # ## ### #### ##### ###### ####### ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_hwij+BD/vz)It may be useful to know that you can find the length of a string by writing`.length`?after it. ~~~ var abc = "abc"; console.log(abc.length); // → 3 ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_hzLkQ7lBb5)Most exercises contain a piece of code that you can modify to solve the exercise. Remember that you can click code blocks to edit them. ~~~ // Your code here. ~~~ ### [](http://eloquentjavascript.net/02_program_structure.html#h_rebKE3gdjV)FizzBuzz [](http://eloquentjavascript.net/02_program_structure.html#p_i0Cvwf75cQ)Write a program that uses?`console.log`?to print all the numbers from 1 to 100, with two exceptions. For numbers divisible by 3, print?`"Fizz"`?instead of the number, and for numbers divisible by 5 (and not 3), print?`"Buzz"`?instead. [](http://eloquentjavascript.net/02_program_structure.html#p_fJ/4Bt0n0A)When you have that working, modify your program to print?`"FizzBuzz"`, for numbers that are divisible by both 3 and 5 (and still print?`"Fizz"`?or?`"Buzz"`for numbers divisible by only one of those). [](http://eloquentjavascript.net/02_program_structure.html#p_ixkJ0lwGKY)(This is actually an interview question that has been claimed to weed out a significant percentage of programmer candidates. So if you solved it, you’re now allowed to feel good about yourself.) ~~~ // Your code here. ~~~ ### [](http://eloquentjavascript.net/02_program_structure.html#h_5Hz2kiaaXp)Chess board [](http://eloquentjavascript.net/02_program_structure.html#p_uH3DV6RVnV)Write a program that creates a string that represents an 8×8 grid, using newline characters to separate lines. At each position of the grid there is either a space or a “#” character. The characters should form a chess board. [](http://eloquentjavascript.net/02_program_structure.html#p_9kgrie1A2f)Passing this string to?`console.log`?should show something like this: ~~~ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ~~~ [](http://eloquentjavascript.net/02_program_structure.html#p_8n1E0bRGiW)When you have a program that generates this pattern, define a variable?`size = 8`?and change the program so that it works for any?`size`, outputting a grid of the given width and height. ~~~ // Your code here. ~~~ > The string can be built by starting with an empty one ("") and repeatedly adding characters. A newline character is written "\n". > Use console.log to inspect the output of your program. > To work with two dimensions, you will need a loop inside of a loop. Put curly braces around the bodies of both loops to make it easy to see where they start and end. Try to properly indent these bodies. The order of the loops must follow the order in which we build up the string (line by line, left to right, top to bottom). So the outer loop handles the lines and the inner loop handles the characters on a line. > You’ll need two variables to track your progress. To know whether to put a space or a hash sign at a given position, you could test whether the sum of the two counters is even (% 2). > Terminating a line by adding a newline character happens after the line has been built up, so do this after the inner loop but inside of the outer loop.
视频一区视频二区三区| 亚洲精品蜜桃久久久久| 99日本亚洲精品视频| 99久久久99久久91熟女| 91久久亚洲成人精品| 亚洲:西西一区二区三区四区五区 午夜精品福利小视频 | 久久精品人人看人人爽| 乱丰满的岳伦在线观看| 亚洲av微乳在线| 男人的天堂久久精平| 91啪啪啪内射网站| 国产一区二区三区a级毛片| 日韩乱妇乱女熟妇熟女网红| 色yeye香蕉凹凸人妻三区| 青草青草视频免费2在线观看| 四十路av熟女俱乐部| 久久视频黄色观看网站| 日本加勒比中文字幕久久| 日韩av手机在线电影| 国产又粗又黄又大又长视频| 中文字幕精品久久伊人| 高清视频在线观看一区二区三区 | 国产91极品身材白皙| 国产精品首页在线播放| 人妻精品一区二区在线播放| 99免费观看视频在线| 91亚洲国产成人久久精品app| 亚洲欧美一二三视频| 欧美日韩久久久久久精品 | 最新偷窥偷拍免费视频观看 | 在线观看视频 你懂得| 2020日本中文字幕| 91人妻人人澡.人人精品| 亚洲av色图com| 99热2这里只有精品| 91九色蝌蚪熟妇出轨| 我要看一级国产黄色绿像| 青青青在线视频自拍| 色图av亚洲综合| 91成人国产精品视频| 亚洲av综合久久伊人| 影音在线精品免费国产资源| 精品久久久久久999| 亚洲激情网在线播放| 91欧美亚洲综合网| 97人妻人人揉人人澡人人爽国产| 牛牛成人手机视频在线| www.199麻豆在线视频| 国产网址手机上可以看的国产网站| 欧美肥臀精品一区二区三区| 亚洲成a人片,77777| 亚洲国产精品久久久久婷婷av| 亚洲最大成人网一区二区三区| 日本黄页在线播放日本网站| 亚洲激情网在线播放| 久久久久久久久久久最新| 亚洲aⅴ欧美综合一区二区三区 | 欧美一区二区三区激情无套| 国产一区二区三区女同| 亚洲 欧美 自拍 中文| 日韩a v日日夜夜| 日韩电影黄色免费| 自拍偷拍亚洲欧美另类| 国产一区二区久久久久久| 亚洲国产精品国自产拍av麻豆| 麻豆丝袜美女人妻中文| 色男人天堂东京热| 国产欧美日韩一区二区三区''| 综合久久综合久久综合久久| 国产一区二区高清在线播放| 国产高潮国产高潮久久久久久91| 精品欧美日韩国产在线| 久久精品久久一区二区三区| 国产高潮国产高潮久久久久久91| 日韩精品福利性无码专区| 伊人久久婷婷色综合98网| 亚洲欧美自拍偷拍在线观看| 国产91极品身材白皙| 久久综合久久综合大香蕉| 99久久极品蜜桃臀精品久久| 成人在线观看黄色片| 日本av男优巧克力| 国产精品欧美日韩五月香蕉| 日韩一区二区三区乱码| 亚洲精品蜜桃久久久久| 日韩美女夜夜爽av| 欧美一区二区三日韩| 欧美人妻系列,中文字幕| 国产日韩av免费一区二区三区| 国产一区二区高清在线播放| 日韩欧美在线视频第一页| 精品美女1区2区3区| 综合激情五月天久久| 91亚洲精品成人在线| 日本午夜在线免费观看| 久久久成人在线免费视频| 91人妻九色大屁股| 久久久免费精品少妇| 国产精品久久久久久久久久69| 91免费av在线观看| 视频一区视频二区三区| 欧美一区二区三区成人久久片| 久久精品国产亚洲av不卡性色| 久久伊人精品青青草原| 精品人妻久久久久中文字幕19禁| 亚洲av精品久久久蜜| 国产清纯白嫩美女无套| 久久久九九九九九精品6| 蜜臀久久久久精品一区二区三区| 92视频影院视频影院麻豆| 亚洲熟妇免费在线视频| 久久免费视频观看99| 亚洲中文字幕成人久久| 精品aa级中文字幕人妻| 一区,二区,三区视频| w疯狂的少妇2做爰韩国| 久久综合久久综合大香蕉| 青娱乐国产视频盛| 99热2这里只有精品| 在线中文字幕第二页| 国产精品久久久久一区二区| 五月爱婷婷六月丁香性| 在线中文字幕第二页| av国产一区二区三区| 男人的天堂久久精平| 欧美3d成人动漫在线| 自拍偷拍亚洲欧美另类| 香蕉久久a v一区二区三区| 日韩美女影院免费在线观看 | 国产成人精品久久综合| 精品97人妻无码中文永久| 欧美一区二区三区,| 亚洲 欧美 自拍 中文| 亚洲欧美日韩一二三四五六七区| 亚洲国产精品97久久宅男| 国产高潮好爽受不了了视频| 精品一区二区三区四区日产| 少妇高潮喷水久久久久久桃花| 北条麻妃裤袜一区二区| 久久传奇网站一区三区视频| 熟女大白屁股在线播放| 日本熟妇乱子伦a片在线观看 | 国产精品久久精品一区二区三区| 日本a级2020在线观看| 久久av一区中文字幕| 久久99精品久久久久久三级| 婷婷在线综合观看视频| 清纯唯美激情五月| 99精品高清视频一区二区| 精品日韩偷拍欧美另类| 亚洲欧美丝袜精品久久直播| 1024 国产高清の最新合集| 亚洲香蕉av电影| 亚洲欧洲黄色图区| 91久久久久久久久久粉嫩| 免费色婷婷在线视频| 国产成人一区二区三区在线视频| 另类h小视频在线观看| 视频在线观看黄页| 亚洲伊人网在线观看| 亚洲欧美日韩大陆| 欧美日本一道本一区二区| 68国产成人综合久久精品| 日韩欧美综合一区二区在线| 免费色婷婷在线视频| 日韩尤物人妻av在线网| 97精品久久人人爽人人爽| 天天射天天舔天天射| 天天日天天干天天爱天天| 99热2这里只有精品| 青娱乐国产视频盛| 亚洲男人天堂久久| 99久久极品蜜桃臀精品久久| 国产一区二中文字幕在线免费观看| 亚洲欧洲色图动图| 91插插插操美女视频| 日韩亚洲丝袜系列| 欧美熟女人妻一区二区三区 | 国产99不卡免费在线观看| 欧美 国产 日韩 一区二区| 美女差点操死在线观看| 欧美熟妇人妻视频在线| 国产精品久久久久久久久久网站| 亚洲天堂性色综合| 午夜国产福利电影| 国产aⅴ爽av久久久久成| 国产91久久精品一区二区老| 91成人国产精品视频| 日韩av在线观看免费看看| 色视频精品视频在线观看| 国产精品99精品一区二区三区∴| 日韩不卡一级成人免费视频| 久久免费视频精彩视频| 天天插天天日天天舔| 亚洲乳大丰满中文字幕少妇av| av色香蕉一区二区三区| 九九久久国产精品久久久久| 天天干天天草天天日天天天射伊人| 人妻精品无码一区二区三区| 亚洲综合成人久久av| 日本精品久久久久中人妻| ass日本丰满熟妇pics| 亚洲图色91东京热| 国产一区二区三区a级毛片| 亚洲青青青国产观看视频| 亚洲国产精选久久| 久久久久女优免费视频| 中文字幕人妻一区二区在线看| 视频免费在线观看91| 50岁老熟女一区二区三区| 色男人天堂东京热| 天天色综合天天射综合| www.视频一区二区三区| 亚洲午夜电影久久久| 色图av亚洲综合| 精品999久久久一免费ww| 91国产视频网站在线观看| 在线观看色有小视频| 精品人妻一区二区三区线国色天香| 91偷拍老熟女露脸合集| 久久99永久免费看| 久久精品 中文字幕| 色亚洲天堂色派对欧美色| 777亚洲精品乱码久久| 日韩中文字幕在线网站| 国产 欧美 日韩 视频| 人人狠狠久久综合网| 91制片在线观看视频| 一区二区三区内射美女毛片| 少妇惨叫久久久久久久| 国产成人精品久久久久久蜜臀 | 日韩中文字幕视频在线播放| 亚洲视频欧美视频另类| 人妻熟 中文字幕| 丝袜日韩中文字幕| 日本女优和黑人的| www日本不卡一二三区| 欧美爱情动作片在线一区| japanese 在线中文字幕| 久久久亚洲熟妇熟女在线| 色婷婷国产熟妇人妻露脸| 制服巨乳人妻在线| 欧美一区二区三区视频午夜| www.视频一区二区三区| 在线人妻国产精品| 熟女激情一区二区三区| 国产精品久久久久成人片| 国产自拍 偷拍 在线| 亚洲天堂av电影| 日韩美女主播人体视频自拍首页| 在线观看色有小视频| 亚洲狠狠婷婷综合久久a| 中文字幕亚洲欧美国产| 偷偷夜夜精品一区二区三区蜜桃| 欧美熟女人妻一区二区三区 | 秋霞电影韩国一区二区二区三区| 亚洲国产一成人久久精品| 福利小视频国产一区| 久久视频在线免费播放| 先锋男人资源中文字幕| 91国偷自产一区二区三区老熟女| 精品乱码久久久久久蜜臀| 日日碰狠狠躁久久躁一区二区| 亚洲一级av大片| 亚洲中文字幕成人久久| 精品乱码一区二区三区四区| 国产一区二区久久久久久 | 97人妻人人揉人人澡人人爽国产| 亚洲日韩视频高清在线观看| 亚洲 免费在线视频| 日韩日韩av在线| 久久精品色婷婷国产网站| 日韩av在线天堂| 欧美精品一区二区三区蜜臀| 日韩人妻插舔激情午夜| 亚洲情欲大片在线观看| 日韩av在线点播| 中文国产成人精品久久一| 欧美最猛性亚洲精品推荐| av成人教育在线播放| 美女18禁久久久久麻豆| 91在线国产九色porny| 18久久久免费视频| 91欧美亚洲综合网| 久久久亚洲熟妇熟女在线| 日韩精品免费91aa| 日韩av电影在线观看的| 久久久久国产亚洲av麻豆| 乱丰满的岳伦在线观看| 少妇人妻一区2区中文字幕| 久久国产精品色av免费看| 麻豆中文字幕av在线| 天美麻豆成人av精品小说| www日本不卡一二三区| 日韩欧美亚州综合久久| 国产高潮好爽受不了了视频 | 亚洲欧美在线视频播放| 国产精品久久久久久久久粉嫩av| 国产91熟女免费视频| 久久久久久久久久久免费网| 欧美一区二区三区激情啪啪啪| 久久视频一区二区三| 亚洲另类色区欧美日韩| 国产日韩欧美春色另类小说| 中文字幕亚洲欧美国产| 日本久久久大片中文字幕| 素人阁久久久久精品人妻| 91国产手机视频在线观看| 日韩少妇视频在线直播| 丰满大屁股熟妇猛交xxx| 人人妻人人澡人人爽国产一区| 亚洲人的午夜影院| 综合 另类 自拍| 美女18禁久久久久麻豆| 久久久久久久久久久久久熟女a∨| 人妻丰满精品一区二区三区| 久久亚洲AV成人无码| 日韩精品综合视频在线| 2020日韩中文字幕| 亚洲天堂黄色在线| 日韩美女在线视频一区| 久久婷婷亚洲中文一区二区| 麻豆精品一区在线免费观看| 日韩欧美颜色渔网| 欧美一区二区理论片在线观看 | 骚妻少妇一区二区| 最新美女激情av| 中文字幕av久久爽爽| 热热久久这里只有精品| 日本熟妇人妻在线| 久久伊人亚洲综合网| 日韩日韩av在线| 久久视频精彩在线观看| 97人妻中文字幕精品视频| 亚洲香蕉av电影| 国产熟女高潮av77777| 制服巨乳人妻在线| 国产精品日韩欧美综合| 日日日日日夜夜夜夜| 久久久国产精品尤物av| 亚州av一区二区三区.| 久久久亚洲在线视频| 狠狠干中文字幕97视频| 高清一区二区日韩视频精品| 欧美熟妇人妻视频在线| 熟女少妇视频一区二区在线| 精品国产乱码久久久人妻| 日本女优中文字幕在线| 人妻人人揉人人澡人人| 欧美精品一区二区三区蜜臀| 日本高清不卡视频在线播放| 亚洲阿v天堂久久| 精品久久一区电影亚洲| 青青青青青欧美在线视频观看| 欧美一区二区三区综合色| 国产欧美版日韩综合| 国语一区二区在线观看| 国产精品一区二区三区三级| 97久久视频免费在线播放| 91超碰熟女在线97| 在线人妻国产精品| 亚洲天堂性色综合| 欧美日韩国产色图视频| 成人人妻视频一区二区| 88av亚洲精品日韩一区二区| 国产精品福利久久久久久久| 久久五月婷婷综合视频| 91丝袜放荡丝袜脚交| 国产精品男人的天堂999| 丰满少妇精品一区二区| 人妻人人揉人人澡人人| 五月激情爱爱婷婷| 日韩精品福利性无码专区| 在线观看视频 你懂得| 精品国产一区二区三区制服| 国产三级三级三级三级av精品| 中文字幕亚洲资源天堂| 208精品福利导航| 玖玖资源站中文字幕一区二区| 熟女人妻之中文字幕| 久操免费福利在线视频观看视频| 在线观看色有小视频| 三级亚洲天堂亚洲天堂| 狠狠干中文字幕97视频| 18久久久免费视频| 亚洲 欧美 制服 人妻| 亚洲激情熟女色图| 一级片一级片久久精品电影网电影 | 熟女大白屁股在线播放| 天天日天天日天天日天天日| 激情黄色开心五月天| 成人av激情网一区二区三区| 大香蕉大香蕉大香蕉大香蕉大| 精品激情视频在线免费观看| 日韩av一区中文| 亚洲激情国产一区| 久久伊人亚洲综合网| 青青青手机版视频在线看| 国产一级av国产免费| 九九久久国产精品久久久久| 99热这里只有的精品| 日本中文国产字幕| av激情网站在线观看| 安斋拉拉中文字幕在线| 成人黄片av在线播放| 美日韩美女三级电影| 婷婷在线综合观看视频| 日韩精品综合免费视频| 久久精品琪琪男人的天堂| 中文字幕国产在线观看| 久久在线人妻熟女高清完整版| 亚洲自拍偷拍 av| 高清一区二区日韩视频精品| 蜜久久久91精品人妻| 色播五月激情四射| 久久精品中文字幕av| 亚洲自拍偷拍 av| 亚洲天堂av电影免费在线| 亚洲欧美丝袜精品久久直播| 热久久免费频精品18| 91精品乱码久久久久久| 国产熟女高潮av77777| 亚洲精选黄色在线观看| 亚洲久久亚女同性| 国产三级三级三级三级av精品| 97精品久久人人爽人人爽| 99.com精品视频| 青草青草视频免费2在线观看| 亚洲 欧美 日本 国产| 热热久久这里只有精品| 精品一区二区三区四区人妻69| 成人免费观看av毛片| 欧美日韩精品亚洲欧美| 草裙成人精品一区二区三区| 少妇一区二区在线免费观看| 国产熟女高潮av77777| 人人妻人人澡人人爽dv| 高清视频在线观看一区二区三区| 日韩乱妇乱女熟妇熟女网红| 人人狠狠久久综合网| 国产亚洲天堂sss| 人妻啪啪视频免费看| 国产日韩av免费一区二区三区| 厕所偷拍视频一区二区三区| 偷偷夜夜精品一区二区三区蜜桃| 中文字幕亚洲欧美国产| 99re热在线精品视频9| 在线免费观看日韩精品视频| 国产成人免费精品视频大全| 十八禁久久久久久久久久久久久久| 亚洲天堂av电影| 制服丝袜亚洲欧美第一| 欧美爱情动作片在线一区| 国产又粗又猛又爽又黄的刘涛视| 欧洲美女黑人粗性暴交视| 亚洲欧美日韩在线中文字幕小| 国产一级淫片免费看久久| 亚洲激情熟女色图| 中文字幕+人妻熟女| 日产av一区二区在线观看| 国产麻豆一级美女精品| 日韩av在线精品观看| 人妻日韩精品在线观看视频 | a级黄片在线免费观看| 99精品高清免费在线视频| 五月爱婷婷六月丁香性| 精品日韩偷拍欧美另类| 国产精品男人的天堂999| 视频在线观看黄页| 国产 另类 在线 欧美日韩| 人妻一区二区中文字幕在线| 精品人妻一区二区三区√| 最新偷窥偷拍免费视频观看| 国产精品福利久久久久久久| 国产乱人妻精品久久久| 国产精品久久久久久久网站门| 丰满大屁股熟妇猛交xxx| 国产欧美日韩制服丝袜在线| 免费色婷婷在线视频| 天天干天天草天天日天天天射伊人| 亚洲国产精品97久久宅男| 成年美女黄色av网站| 色播网站在线播放| 999热精品在线观看| 99精品高清免费在线视频| 热香蕉和冷香蕉功效一样吗| 中文字幕+人妻熟女| 亚洲av综合色区手机| 日韩黄色一级大片| 五月婷婷六月丁香资源| 亚洲熟妇av日韩熟妇在线| 激情四射五月开心六月婷婷| 精品无码久久久久久毛片| 丰满少妇精品一区二区| 精品人妻二区中文字幕| 日韩av中文字幕一区| 欧美日韩亚洲大片在线| 超碰97在线观看国产| 亚洲狠狠婷婷综合久久a| 香蕉在线蕉久在线| 亚洲欧美日韩一区二区三区不卡| 欧美肥臀精品一区二区三区| 真实玩弄白嫩丰满人妻少妇三级| 999热精品在线观看| 亚洲国产精品综合久久2007| 一区二区三区四区中文字幕| 91九色porny国产视频| 久久久亚洲在线视频| 天天干天天插天天操天天日| 熟女人妻之中文字幕| 国产精品成人av在线网站| 精品久久一区电影亚洲| 成人av电影免费版| 日韩成人av在线电影观看| 国产日韩av免费一区二区三区| 国产精品午夜蜜av| 99国产在线 精品 视频| 中文字幕av久久爽爽| 国产又大又猛又黄的视频| 青青草成人影院在线观看| 久久精品国产亚洲av久丨| 亚洲天堂av电影| 亚洲 免费在线视频| 久久99精品国产91| 欧美熟妇人妻视频在线| 香蕉久久a v一区二区三区| 五月婷婷六月丁香资源| 亚洲最黄色的视频| 91老司机免费福利| 国产av在线观看麻豆| 日韩厕所偷拍美女| 素人阁久久久久精品人妻| 91在线精品一区二区网站| 在线人妻国产精品| 色综合久久999| 日本中文字幕久久免费精品| 日韩草比网站在线免费观看 | 国产成人精品久久久久久蜜臀| 91成人国产精品视频| 热久久免费频精品18| 婷婷亚洲免费基地| 青青草青青操在线播放| 青青草成人影院在线观看| 国产日韩欧美人妻在线观看| 日韩在线观看免费全集网站| 亚洲精品一区二区三区丝袜| 丰满人妻一区二区三区av| 久久精品琪琪男人的天堂| 91精品乱码久久久久久| 精品国产乱码久久久久夜深| 国产乱子伦视频免费| 亚洲av激情小说| 色播五月激情四射| 亚洲欧洲av在线| av日韩在线有码a区| 亚洲欧美丝袜精品久久直播| 日韩av一区二区三区久久久 | 骚妻少妇一区二区| 日韩亚洲丝袜系列| 熟妇人妻 一区二区三区中文字幕| 久久在线人妻熟女高清完整版 | 蜜臀av日韩特黄大片| 国产高潮国产高潮久久久久久91| ass日本丰满熟妇pics| 欧美又色又爽又黄又粗暴| 七十路熟女俱乐部| 久久热最新视频在线观看| 国产欧美日韩亚洲另类第一第二页| 中文字幕熟女人妻在线观看| 亚洲香蕉av电影| youwu视频在线| 日韩在线啊啊啊的视频| huangse网站在线观看| youwu视频在线| 在线观看日韩中文| 日本高清不卡视频在线播放| 亚洲欧美日韩国产精品综合| 蜜久久久91精品人妻| 久久99精品国产91| 日韩中文字幕在线综合网| 国产91在线播放精品| 日韩乱妇乱女熟妇熟女网红| 久久综合久久综合大香蕉| 亚洲中文字幕福利视频| 少妇一区二区在线免费观看| 亚洲国产欧美日本视频| 在线观看色有小视频| 午夜精品福利小视频| 日韩a大片在线观看| 国产91久久久久久久| 国产91久久久久久久| 久久国产精品色av免费看| 在线免费av大香蕉| 午夜日韩麻豆福利| 国产精品久久久久成人片| 91一区二区精品在线| 日韩欧美一二三级| www.视频一区二区三区| 久久亚洲 欧美 综合aⅴ| 国语一区二区在线观看| 91偷伦一区二区三区蜜臀| 五月婷久久综合狠狠爱97| 国产成人无码AA精品一区| 久久久久久久久久久免费网| 精品国产乱码久久久人妻| 亚洲制服欧美丝袜| 亚洲五月婷婷激情图片| 日韩精品福利性无码专区| 欧美中文字幕在线观看视频| 午夜影院av在线| 日韩av中文字幕一区| 精品人妻一区二区三区√| 亚洲av亚洲av亚洲| 欧美一区二区三区成人免费看 | 欧美精品人妻丝袜一区| 日韩手机在线一区二区三区| 婷婷激情免费视频| 欧美一区二区精品人妻免费视频 | 亚洲国产精品午夜av| 日韩美女主播人体视频自拍首页| 人人狠狠久久综合网| 香蕉久久a v一区二区三区| 久久成人网男人的天堂| 日韩av网址在线播放| laoyawo老鸭窝在线视频| 国产亚洲欧美日韩在线首页| 色图av亚洲综合| 国产精品久久久久成人片| 中文字幕一线一区和二区| 亚洲av亚洲av亚洲| 国产aⅴ爽av久久久久成| 之久精品一区二区| 人人妻人人澡人人看| 亚洲日本韩国欧美一起| 蜜桃视频在线观看一区精品| 精品国产丝袜久久久一区二区| 婷婷中文字幕色婷婷| 国产成人av吴梦梦视频| 欧美肥臀精品一区二区三区| 久久国产精品色av免费看| 久久久久国产精品夜夜夜| 欧美一区二区三日韩| 久久亚洲精品无码系列客服| 明天我们好好过高清免费| 一级片一级片久久精品电影网电影| 91国偷自产一区二区三区偷拍| 亚洲欧洲色图动图| 91免费版下载成人| 18久久久免费视频| 国产精品久久欠久久al换脸综合| 久久亚洲精品日韩高清| 一区二区三区精品乱子伦……| 久久久久久久黄色午夜精品| 人妻精品一区二区在线播放| 91精品人妻一区二区三区四区| 国产欧美版日韩综合| 成人黄色国产网站在线观看| 日韩手机无线看视频| 日韩精品福利性无码专区| 人妻丰满精品一区二区三区| 久久视频一区二区三| 人妻精品一区二区在线播放| 秋霞在线观看色哟哟视频| 国产91久久精品一区二区老| 91偷伦一区二区三区蜜臀| 91porny国产九色| 欧美精品一区二区三区蜜臀| 日本二次元少女裸| 久久精品国产久精果冻传媒| 日韩a毛片视频免费看| 人妻日韩精品在线观看视频 | 午夜在线看1000集| 亚洲激情有码一区二区| 五月综合婷婷婷婷婷婷| 秋霞在线观看色哟哟视频| 国产日韩欧美春色另类小说| 欧美精品一区二区三区蜜臀 | 秋霞电影韩国一区二区二区三区| 国产又大又长又粗又硬免费视频| 91精品久久久久久五月天| sepapa自拍偷拍| 亚洲av不卡码在线看| 成人av电影免费版| 国产一级淫片免费看久久| 日本aaaa视频在线观看| 国产视频av一区二区| 国产精品网址在线观看| 人妻精品一区二区在线播放| 狠狠久久综合丁香777米奇| 人妻夜夜爽天天爽麻豆| 日韩av一区中文| 久久这里只有精品久| 日本亚洲天堂久久| 成年美女黄色av网站| 激情一区日韩一区欧美一区| 国产中文字幕在线91| 国产又大又猛又黄的视频| japanese 在线中文字幕| 日韩av中文网址| 婷婷丁香花五月天| 亚洲综合在线伊人| 日韩成视频在线播放| 国产日韩欧美成人一二三区| 亚洲成人av久久久久| 欧美一区二区三区激情无套| 国产一区二区视频大全床| 美女差点操死在线观看| 久久行黑国产露脸精品| 欧美日本一道本一区二区| 久久精品国产亚洲av久丨| 日韩精品久久久久久久软件| 亚洲精选黄色在线观看| 激情一区日韩一区欧美一区| 999精品插丰满少妇人妻| 日韩成视频在线播放| 亚洲综合精品久久| 日韩精品在线播放第三页| 亚洲自拍偷拍色图区| 久久久精品蜜桃在线| 日韩中文字幕视频在线播放| 精品欧美日韩国产在线| 在线中文字幕第二页| 在线人妻国产精品| 人人妻人人澡人人看| 成人黄色午夜污网站在线观看| 日韩av午夜精品| 精品久久久久久18免费网站 | 久久久久久人妻无码| 国产又粗又硬又长又爽视频| 亚洲熟妇在线观看一区二区| 亚洲自拍偷拍色图区| 99.com精品视频| 日韩欧美xxxx大片| 成人av电影免费版| 久久久久久人妻无码| 国产成AV人片在线观看天堂无码| 国产日韩欧美人妻在线观看| 欧美日本一道本一区二区| 蜜久久久91精品人妻| 久久久久国产麻豆婷婷| 免费麻豆国产一区二区三区| 欧美一区二区性久久久| 欧美日本韩国乱搞视频| 在线观看日韩中文| 日韩欧美一级在线视频| ass日本丰满熟妇pics| 青青草久久大香蕉| 中文字幕在线视频亚洲| 亚洲国产欧美日本视频| 丰满熟女一区二区三区在线| 日韩av在线观看卡一卡| 亚洲精品乱码97久久久久久| 九九re精品免费视频| 国产精品成人av麻豆| av青青草原在线观看| 清纯唯美激情亚洲综合另类 | 婷婷基地中文字幕| 久久五月天天婷婷激情综合| 色综合久久久久久久久| 精品国产乱码久久久人妻| 日韩av电影免费在线播放| 国产精品久久欠久久al换脸综合| 久久久久久久久人妻精品| 秋霞在线观看色哟哟视频| 91麻豆精品91久久久久同性 | 中文字幕人妻一区二区在线看| 91一区二区精品在线| 国产五月天在线观看视频| 国产欧美一区二区二区精品| 亚洲精品久久第一页| 日韩欧美在线视频第一页| 人妻中出视频一区二区| 日日夜夜夜视频伊人久久| 欧美高清在线视频99| 日韩中文字幕在线综合网| 67914熟女在线观看| 五月天色婷婷av在线| 青青青手机版视频在线看| 香蕉在线蕉久在线| 蜜桃一区二区三区大香蕉| 中文在线字幕a在线| 久久人搡人人玩人妻精品| 999热精品在线观看| 亚洲自拍偷拍 av| 一区二区三区乱码视频| 国产成人av最新网址| 久久传奇网站一区三区视频| 久久五月天天婷婷激情综合| 91欧美亚洲综合网| 天天操天天干天天妻| 高清中文字幕乱码在线| 亚洲国产精品综合久久2007| 国产亚洲天堂sss| 激情亚洲一区蜜桃在线| 天天日天天干天天爱天天| 99久久窝窝午夜影视| 2020日本中文字幕| 俺去鲁婷婷六月色综合| 中文字幕一区二区三区六区9区| 91人妻九色大屁股| 亚洲 免费 在线 观看| 一区二区 熟女人妻| 国产清纯白嫩美女无套| 久久久亚洲精品久久仙| 久久久精品99国产国产精| 激情亚洲一区蜜桃在线| 日韩在线免费视频精品| 午夜精品久久久久久久久二区三区| 日日碰狠狠躁久久躁一区二区| 日韩色在线视频观看免费| 亚洲精品久久第一页| 50岁老熟女一区二区三区| 国产精品欧美日韩五月香蕉| 日韩手机在线一区二区三区| 日韩一区二区三区水蜜桃| 五月激情爱爱婷婷| 人妻人人揉人人澡人人| 日本18禁片免费久久| 亚洲熟妇在线观看一区二区| 国产91久久久久久久| 青青青在线视频自拍| 久久九特黄的免费大片| 97久久视频免费在线播放| 夜夜撸日日撸夜夜爽日日干| 日韩av电影免费在线播放| av青青草原在线观看| 免费色婷婷在线视频| av在线免费观看网站大全 | 精品国产一区二区三区制服| 亚洲国产精品五月天久久久| 初撮日本五十路人妻| 欧美肥臀精品一区二区三区| 精品国产麻豆免费成人网| 日韩精品综合视频在线| 中文字幕人妻互换久久视频| 亚洲av不卡码在线看| 国产成人免费精品视频大全| 中文字幕+人妻熟女| 国产亚洲天堂sss| 亚洲五月婷婷激情图片| 人妻中出视频一区二区| 久久av资源男人站| 一区二区 熟女人妻| 日韩成人av影视在线观看| 麻豆丝袜美女人妻中文| 一区二区三区内射美女毛片| 欧美日韩一区二区综合视频| 97久久视频免费在线播放| 激情四射五月开心六月婷婷| 欧美日韩精品欧美日韩| 最美人妻一区二区三区| 68国产成人综合久久精品| 亚洲天堂黄色免费| 久久视频精彩在线观看| 欧美中文字幕在线一区| 日本vs欧美一区二区三区| 欧美日韩人妻久久精品| 97网视频免费在线观看| 福利日韩精品中文字幕专区| 久久精品美国亚洲av伦理| 日本女同性恋视频| 九九re精品免费视频| www.亚洲成人色| 日韩av福利大片在线观看| 日韩av 自拍偷拍| 狠狠干中文字幕97视频| 亚洲 欧美 日本 国产| 玖玖资源站中文字幕一区二区| 国产丝袜香蕉在线观看| 18禁成年av网站免费看| 天天在线天天综合网色| 亚洲国产欧美日本视频| 欧美一二三区在线观看| 国产aⅴ爽av久久久久成| 厕所偷拍视频一区二区三区| 国产日韩亚洲大尺度高清| 天堂av最新资源在线| 国产欧美一区二区二区精品| 99热2这里只有精品| 蜜臀av日韩特黄大片| 中文字幕一线一区和二区| 色图av亚洲综合| 亚洲国产欧美激情图区| 少妇惨叫久久久久久久| 国产欧美精品久久无广告| 新版天堂av资源在线| 777亚洲精品乱码久久| 五月黄色激情视频| 色综合久久久久久久久| 天天干天天天天射天天操| 少妇人妻视频在线观看| 欧美熟女高清视频一区二区| 68国产成人综合久久精品| 国产99不卡免费在线观看| 日产av一区二区在线观看| 亚洲五月婷婷视频| 日本高清不卡视频在线播放| 日韩 美女 在线观看| 亚洲av微乳在线| 97偷拍视频在线观看| 欧美日韩久久久久久精品| 色视频精品视频在线观看| 最新亚洲国产中文字幕av| 婷婷免费精品视频在线| 亚洲天堂黄色在线| ass日本丰满熟妇pics| huangse网站在线观看| 久久久国产精品尤物av| 一区二区三区内射美女毛片| 国产 日韩 欧美 日本| a级黄片在线免费观看| 日韩欧美久久免费观看| 久久成人福利视频资源| 亚洲欧美日韩一区二区三区不卡| 九九re精品免费视频| 日韩亚洲丝袜系列| 亚洲伊人网在线播放| 国产91久久精品一区二区老| 蜜臀av日韩特黄大片| 日本av都有哪些系列| 中文字幕av久久爽爽| 亚洲国模在线视频| 天天操天天爽天天舔天天操一操| 欧美日韩精品成人在线| 久久av一区中文字幕| 男人亚洲天堂2018| 欧美一区二区三区成人久久片| 国产青青91av在线视频| 国产日韩亚洲大尺度高清| 国产 另类 在线 欧美日韩| 亚洲成a人片,77777| 久久视频这里都是精品| 久久久久999蜜桃视频| 国产成人无码AA精品一区| 欧美精品人妻丝袜一区| 久久久久久网站精品免费| 日韩欧美 国产精品| 熟女少妇一区二区精品| 久久久久久久久久久最新| 亚洲欧美自拍偷拍在线观看| 最新精品成人在线| 亚洲 欧洲 日韩 人妻| 在线国产小视频麻豆| 婷婷亚洲天堂中文字幕| av在线免费播放成人| 国产一区二区久久久久久| 91精品久久久久久五月天| 亚洲欧美日韩偷拍综合| 成年女人晚上碰免费视频| 久久爱免费视频16| 国产熟女高潮av77777| 午夜在线看1000集| 92视频影院视频影院麻豆| 18在线观看久久久麻豆| 丰满人妻一区二区三区av| 91精品久久久久久五月天| 国产天堂avwww| 在线人妻国产精品| 午夜在线观看高清完整版| 欧美爱情动作片在线一区| 成人免费av在线网站| 在线人妻国产精品| wwxxx中文字幕| 四十路av熟女俱乐部| 久久免费视频观看99| 97cao瑟瑟在线观看| 蜜桃av 1区二区| 人人妻人人澡人人爽dv| 91一区二区三区精华液| 亚洲狠狠久久综合一区| 五月天丁花香婷婷| 人妻中出视频一区二区| 亚洲国产精品97久久宅男| 精品aa级中文字幕人妻| 瑟瑟网站免费观看| 国产乱子伦视频免费| 亚洲综合精品久久| 97成人免费碰碰碰视频| 又爽又黄的免费视频91| 91偷伦一区二区三区蜜臀| 日韩av黄片在线观看| 91在线精品国自产拍| 欧美日韩精品亚洲欧美| 欧美激情电影在线观看不卡| 成年女人晚上碰免费视频| 久久免费视频观看99| 91中文字幕制服诱惑| 久久久久久久久久性| 国产精品色呦呦视频免费看 | 蜜桃黄色av网站免费播放| 激情四射五月开心六月婷婷| 亚洲天堂av电影免费在线| youwu视频在线| 亚洲欧美日韩一二三四五六七区| 亚洲 免费 在线 观看| 美女在线观看亚洲一区| 99精品视频69v精品视频| 婷婷激情免费视频| 日本女优和黑人的| 素人阁久久久久精品人妻| 亚洲激情 欧美激情| 久久99精品久久久久久三级| 欧美日韩久久久久久精品| 福利小视频国产一区| 无码人妻精品一区二区三区久久| 色婷婷中文字幕基地| 美女在线观看亚洲一区| 免费看久久久久久久性大片| 亚洲av精品久久久蜜| 2020中文字幕在线看电影| w疯狂的少妇2做爰韩国| 国产精品网址在线观看| av国偷自产自拍自在线| 亚洲日韩视频高清在线观看| 成年人晚上免费看的视频| 91国产手机视频在线观看| 欧美高清在线视频99| 加勒比精品一区二区三区| 国产亚洲天堂sss| 亚洲av综合久久伊人| 五月爱婷婷六月丁香性| 日韩在线免费视频精品| 欧美一区二区性久久久| 日韩美女在线视频一区| 日本av熟女人妻| 先锋男人资源中文字幕| 欧美日韩国产一区二区三区免费| 国产又大又长又粗又硬免费视频| 日韩av在线精品观看| 色视频精品视频在线观看| 日本黄页在线播放日本网站| 日韩不卡一级成人免费视频| 久久99精品国产91| 91沈先生探花极品在线| 国产自拍 偷拍 在线| 日本熟妇人妻在线| 成人人妻视频一区二区| 国产激情综合视频在线观看| 99久久窝窝午夜影视| 中文字幕精品久久伊人| 性欧美另类sex极品free | 丰满人妻一区二区三区视频看看| 免费麻豆国产一区二区三区| 欧美一区二区理论片在线观看 | 青青91免费视频| 中文字幕亚洲专区欧美| 日韩av电影免费在线播放| 日韩午夜精品啪啪啪| 污视频在线观看91| 久久久久久夜夜夜精品国产| 人妻熟女视频免费观看| 久久久久中文字幕免费久久久久久| 欧美熟女人妻一区二区三区| 亚洲中文字幕福利视频| 99re在线精品国产欧美久久 | 中文字幕国产在线观看| 最新精品成人在线| 久久久成人在线免费视频| 久久亚洲熟妇中文字幕| 丰满少妇精品一区二区| 青青青青青欧美在线视频观看| 亚洲中文字幕福利视频| 五月综合缴情婷婷六月| 欧美日韩精品在线观看免费| 国产麻豆一级美女精品| 欧美日韩精品综合在线一区二区| 亚洲人妻中文字幕av首页| 91偷伦一区二区三区蜜臀| 88av亚洲精品日韩一区二区| 色哟哟免费在线播放| 大香蕉久草网一区二区三区| 久久久亚洲熟妇熟女在线| 日本亚洲天堂久久| 久久午夜福利电影免费试看| 玖玖资源站中文字幕一区二区| 久操免费福利在线视频观看视频| 国产99成人自拍视频| 亚洲精选黄色在线观看| 亚洲 欧美 自拍 中文| sepapa自拍偷拍| 国产精品欧美日韩五月香蕉| 国产又大又长又粗又硬免费视频| 国产黄色主播网址大全在线播放| 91国偷自产一区二区三区偷拍| 67914熟女在线观看| 国产91熟女免费视频| 国产熟女高潮av77777| a级黄片在线免费观看| 在线中文免费黄色| 国产一区二区三区四区中文字幕| 人妻精品一区二区在线播放| 五月婷婷51视频免费| 欧美日韩国产一区二区三区免费| 国产成人无码AA精品一区| 乱丰满的岳伦在线观看| 少妇人妻给我内射视频| 夜夜撸日日撸夜夜爽日日干| 91久久精品日日躁夜夜躁| 97人妻中文字幕精品视频| 日韩美女在线视频一区| 国产精品久久久久成人片| www.199麻豆在线视频| 久久 99 精品视频| 一区二区三区四区中文字幕| 国产麻豆剧传媒精品视频| 欧美精品国产精品久久久| 午夜在线看1000集| 超碰在线免费成人午夜剧场97| 亚洲:西西一区二区三区四区五区| 国产欧美一区二区二区精品| 777亚洲精品乱码久久| 国产成人精品久久久久久蜜臀| 蜜臀av日韩特黄大片| 日韩精品少妇人妻熟女| 久久国产精品人妻酒店| 国产精品成人av在线网站| 日韩精品久久久久久久软件| 99久久老熟妇仑乱一区| 成年人免费看黄色片| 日韩大全毛片免费观看视频| av蜜臀懂色啊啊啊| 91九色蝌蚪熟妇出轨| 国产乱子伦视频免费| 蜜臀av 麻豆av| 国产日韩亚洲大尺度高清| 日产av一区二区在线观看| 欧美中文字幕久久久| 99精品高清免费在线视频| 天天在线天天综合网色| 久久久九九九九九精品6| 色婷婷一区二区三区四区五| 五月婷婷蜜臀性色av| 亚洲成年人电影天堂| 天天日天天干天天色| 先锋男人资源中文字幕| 亚洲精品熟女中文字幕| 先锋男人资源中文字幕| 麻豆视传媒官网直接进入免费观看| 欧美一区二区三区,| 91久久亚洲成人精品| 日韩大全毛片免费观看视频| 韩国女团午夜大尺度福利| 中文字幕av最新在线| 首页国产中文字幕av| 亚洲国产aⅴ精品一区二区欧美| 在线不卡日韩视频播放| 亚洲精品久久久久久久久蜜桃| 青青草久久大香蕉| 99久久999久久久精品综合| 欧美中文字幕久久久| 狠狠干中文字幕97视频| 欧美一二三区在线观看| 污视频在线观看91| 亚洲日本精彩视频在线观看| 久久午夜福利电影免费试看| 人妻办公室被强d在线电影| 五月爱婷婷六月丁香性| 国产亚洲av免费一区二区| 久久99免费成人在线| 欧美日韩久久久久久精品| 亚洲青青青国产观看视频| 北条麻妃裤袜一区二区| 国产激情综合视频在线观看| 中文字幕一线一区和二区| 亚洲香蕉av电影| 久久99永久免费看| 日本高清理论片中文字幕| 我要看一级国产黄色绿像| 777亚洲精品乱码久久| 厕所偷拍视频一区二区三区| 男人的天堂久久精平| 337p亚洲精品色噜噜| 久久久久久添逼视频| 中文字幕熟女人妻在线网页| 日韩一区二区三区乱码| 久久婷婷亚洲中文一区二区| 日韩国产精品电影网| 99爱99久久久久久久久久| 国产精品首页在线播放| 精品一区二区三区四区人妻69 | 在线观看日韩美视频一区| 欧美日韩成人精品视频| 久久免费视频观看99| 丰满的人妻一区七区| 篠田优中文字幕在线播| 精品人妻一区二区三区线国色天香| 亚洲国模私拍视频| 一区二区三区精品乱子伦……| 精品中文久久久久久| 日产av一区二区在线观看| 中文字幕一区二区三区六区9区| 中文字幕亚洲中文字幕| 热久久免费频精品18| 精品乱码一区二区三四五六区| 国产一区二区三区女同| 999热这里只有精品在线| 欧美一二三区在线观看| 91在线精品一区二区网站| 久久蜜臀精品一区二区| 久久亚麻亚洲蜜桃臀| 中文字幕熟女人妻在线观看| 日韩手机在线一区二区三区| 精品国产一区二区三区制服| 色婷婷一区二区三区四区五| 麻豆精品123在线观看| 人妻有码中文字幕中文| 伊人久久婷婷av| 久久97久久免费视频| 亚洲狠狠久久综合一区| 久久国产精品色av免费看|