当前位置:网站首页>Syntax of generator function (state machine)
Syntax of generator function (state machine)
2022-07-07 15:41:00 【When can Xiaobai advance to success】
1、 Basic concepts
Generator function ( Generator function ) yes ES6 An asynchronous programming solution provided by , The grammatical behavior is completely different from traditional functions .
- Grammatically : First of all, it can be understood as a State machine , Encapsulates multiple internal states .
- Returns the traverser object : perform Generator The function returns one Traverser object , The returned iterator object can traverse in turn Generator Every state inside a function .
- Formally :Generator Function is a normal function , There are two characteristics :①function There is a between the command and the function name asterisk ;② Function body internal use yield Statement defines different internal states (yield Meaning of output )
function main()
{
var hw = DayGenerator();// Returns the traverser object
for(let i=0;i<3;i++)
{
console.log(hw.next().value);
}
}
function* DayGenerator()
{
// Code block 1
yield 'sunday';
// Code block 2
yield 'monday';
// Code block 3
return 'saturday';
}
Running results :
- Calling method :Generator The call method of a function is the same as that of a normal function , Also add a pair of parentheses after the function name .
- Whether to execute immediately , Return value : call Generator After the function , This function Not implemented . And it's not the result of the function , It is a pointer object that executes the internal state . namely Traverser object .
Every time you call next Method , The internal pointer is executed from the function header or the last stop , Until I hit the next one yield sentence ( or return sentence ). In other words ,Generator The function is Execute in sections Of ,yield Statement is a flag to pause execution , and next Method can resume execution .
2、yield expression
because Generator The only traverser object returned by the function is to call next Method to traverse the next internal state , So it actually provides A function that can pause execution .yield Statements are pause flags .
Of the traverser object next The operation logic of the method is as follows :
- encounter yield Statement pauses the execution of subsequent operations , And will follow closely yield After the expression as the return object value Property value .
- Next call next Method, and then continue to execute , Until I hit the next one yield sentence .
- If there is no new yield sentence , It runs until the end of the function , until return The statement so far , And will return The value of the expression after the statement is used as the value of the return object value Property value .
- If the function doesn't have return sentence , Returns the value The property value is undefined.
yield and return The difference between :
Similarities : Can return the value of the expression immediately after the statement .
The difference : encounter yield Function pause , Next time, it will continue to execute backward from this position ; and return The sentence does not have the function of location memory , A function can only be executed once return sentence , But it can be done many times yield sentence .
yeild Expression if used in another expression , Must be in parentheses
function* demo(){
console.log('Hello'+yield);//SyntaxError Grammar mistakes
console.log('Hello'+yield 123);//SyntaxError
console.log('Hello'+(yield));//ok
console.log('Hello'+(yield 123));//ok
}
yield An expression is used as a function parameter or placed to the right of an assignment expression , I don't have to put in parentheses .
function* demo(){
foo(yield 'a',yield 'b');//ok
let input = yield;
}
边栏推荐
- 使用cpolar建立一个商业网站(2)
- Getting started with webgl (2)
- Qu'est - ce qu'une violation de données
- How to understand that binary complement represents negative numbers
- Ctfshow, information collection: web7
- Zhongang Mining: Fluorite continues to lead the growth of new energy market
- [server data recovery] data recovery case of raid failure of a Dell server
- How to build your own super signature system (yunxiaoduo)?
- [understanding of opportunity -40]: direction, rules, choice, effort, fairness, cognition, ability, action, read the five layers of perception of 3GPP 6G white paper
- Unity之ASE实现全屏风沙效果
猜你喜欢
【服务器数据恢复】戴尔某型号服务器raid故障的数据恢复案例
OpenGL's distinction and understanding of VAO, VBO and EBO
Guangzhou Development Zone enables geographical indication products to help rural revitalization
[server data recovery] a case of RAID data recovery of a brand StorageWorks server
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
HW初级流量监控,到底该怎么做
什麼是數據泄露
Ctfshow, information collection: web6
TypeScript 发布 4.8 beta 版本
2022全开源企业发卡网修复短网址等BUG_2022企业级多商户发卡平台源码
随机推荐
[Lanzhou University] information sharing of postgraduate entrance examination and re examination
Window环境下配置Mongodb数据库
摘抄的只言片语
leetcode 241. Different ways to add parentheses design priority for operational expressions (medium)
【数字IC验证快速入门】22、SystemVerilog项目实践之AHB-SRAMC(2)(AMBA总线介绍)
Super signature principle (fully automated super signature) [Yun Xiaoduo]
[quick start of Digital IC Verification] 24. AHB sramc of SystemVerilog project practice (4) (AHB continues to deepen)
2022年5月互联网医疗领域月度观察
银行需要搭建智能客服模块的中台能力,驱动全场景智能客服务升级
#HPDC智能基座人才发展峰会随笔
一个需求温习到的所有知识,h5的表单被键盘遮挡,事件代理,事件委托
What is Base64?
什麼是數據泄露
简述keepalived工作原理
What are PV and UV? pv、uv
Webgl texture
15. Using the text editing tool VIM
TypeScript 发布 4.8 beta 版本
【数字IC验证快速入门】20、SystemVerilog学习之基本语法7(覆盖率驱动...内含实践练习)
Vertex shader to slice shader procedure, varying variable